关于c++的多态的实现

 本来以为自己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 很关键

 

 

实际上就是一些很弱智的东西 自己老忘细节 总结下来 小朋友们可以看看 大虾们飘过就好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值