本来以为自己C++学的不错,但是同学用JAVA一个简单的由父类指针指向子类的,然后以指针指向一个父类子类都有的同名函数,JAVA自动调用子类的同名函数,一个简单的不行的问题,想当然C++也是这样,不就是实现多态么,实际上知识上有点漏洞
看以下代码:
#include <iostream>
using namespace std;
class A{
public:
virtual void method()
{
cout << "a method" << endl;
}
};
class B:public A{
public:
virtual void method(){
cout << "b method" << endl;
}
};
int main()
{
A* a = new B();
a->method();
system("pause");
return 0;
}
大家说结果该是什么本来以为是输出b method实际上可以试一下 输出结果是a method
因为C++并没有实现这种动态识别的机制,要是想实现得自己用MFC实现,系统代码里面没有
当然也可以强转实现
重新写main函数
int main()
{
A* a = new B();
((B*) a)->method();
system("pause");
return 0;
}
这样就可以了 在第二行 一定要写俩括号要不有歧义 但是这样实现多态显得有些刻意
翻了翻以前的课本实际上标准的C++多态是这么实现的 最低层的父类是一个虚基类 然后通过最开始的方法就能实现多态,但是如果基类不是虚基类那么就要强转,到底JAVA比C++设计稍微完善一点哈 看代码
#include <iostream>
using namespace std;
class A{
public:
virtual void method() = 0;
};
class B:public A{
public:
virtual void method(){
cout << "b method" << endl;
}
};
int main()
{
A* a = new B();
a->method();
system("pause");
return 0;
}
记住虚函数后面要是不实现的话一定要写=0 很关键
实际上就是一些很弱智的东西 自己老忘细节 总结下来 小朋友们可以看看 大虾们飘过就好