首页 > 编程 > C++ > 正文

c++类的多态及其不可逆

2019-11-08 00:44:48
字体:
来源:转载
供稿:网友
class A{public:virtual ~A(){}virtual void fun(){PRintf("func a/n");}private:char a;int b;char c;};class B:public A{public:~B(){}void fun(){printf("func b/n");}

};

int main(int argc, char* argv[]){B b;A d;A *a = &b;B *c = &b;a->fun();c->fun();a = &d;c = &d;a->fun();c->fun();return 0;}

结果分析:

c = &d;   cannot convert from 'class A *' to 'class B *'        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

不能将父类赋给子类    原因如下, 子类可以在父类的基础上扩展内存 , 也就是多样化, 如果用父类生成的已有空间给子类使用, 那么可能存在内存溢出, 父类也不知道子类具体有哪些东西, 具体解释可以google

将错误去掉打印结果:

func b

func b

func a

解释下第二个输出: 类的多态性, 注意函数的返回值以及参数都需要和父类才能实现多态性, 即同一函数实现各自类的实现

如果子类只改变返回值会报错, 要改变返回值, 参数也必须改变才不会报错


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选