C++的多态性只能通过virtual关键字实现
2013-04-28 11:16 张汉生 阅读(217) 评论(0) 编辑 收藏 举报今天看到C++多态性这一块,就写了一个程序验证一下。
1 #include <iostream> 2 using namespace std; 3 class Solution { 4 public:/* 5 int maximalRectangle(vector<vector<char> > &matrix) { 6 // Start typing your C/C++ solution below 7 // DO NOT write int main() function 8 return 0; 9 }*/ 10 }; 11 class A { 12 public : 13 virtual void print(){ 14 cout << "print in A" << endl; 15 } 16 }; 17 class B: public A{ 18 public: 19 void print(){ 20 cout << "print in B" << endl; 21 } 22 }; 23 class C:public A{ 24 public : 25 void print(){ 26 cout << "print in C" << endl; 27 } 28 }; 29 int main(void){ 30 A * b = new B(); 31 A * c = new C(); 32 b->print(); 33 c->print(); 34 return 0; 35 }
上述代码的运行结果为:
print in B
print in C
这和大多数人想的一样,可是如果基类A中的print函数不加virtual关键字的话,上述代码的结果为
print in A
print in A
这个结果应该是在不同的编译器上会有所差别,c++标准只要求加了virtual关键字的能够正确实现多态行为,并且多态行为也只能通过虚函数实现。而在java中,多态性行为是不需要加关键字进行描述的。
关于c++,java以及其他多种语言中的多态性差异,以后会更加关注。