您当前的位置: 首页 >  c++

txwtech

暂无认证

  • 3浏览

    0关注

    813博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

cc42a_demo_c++多继承与虚基类

txwtech 发布时间:2020-01-22 22:59:33 ,浏览量:3

//42dk2j_cpp_c++多继承与虚基类_txwtech-供了解

//多继承与虚继承--实际开发中,尽量不用多继承。java与c#没有多继承,实践证明可以不用多继承。 //--多继承 //--多继承中的二义性问题 //二义性:  /*1.当Pegaus飞马,同时继承了Horse和Bird时,Horse和bird都有相同的函数getColor和itsColor. 一个同时继承2个的情况 ***class Pegasus :public Horse, public Bird//多继承 2. 2个继承一个的情况。Horse和bird都继承Animal的年龄,到了飞马Pegasus继承Horse和bird时,那到底继承哪个Animal的age呢? 这种情况就需要用到C++的高级特性,叫虚基类 虚基类专门解决,菱形多继承产生的二义性问题

/* 当class Horse:public Animal //改成虚继承: class Horse :virtual public Animal时,执行时horse就不会构造Animal了。 class Bird :virtual public Animal时,执行时bird就不会构造Animal了。 Pegaus飞马同时继承了Horse和Bird,就会直接构造Animal

--虚基类解决二义性问题 --虚基类的构造函数

java与c#没有多继承 */

 

//42dk2j_cpp_c++多继承与虚基类_txwtech

//多继承与虚继承--实际开发中,尽量不用多继承。java与c#没有多继承,实践证明可以不用多继承。
//--多继承
//--多继承中的二义性问题
//二义性: 
/*1.当Pegaus飞马,同时继承了Horse和Bird时,Horse和bird都有相同的函数getColor和itsColor. 一个同时继承2个的情况
***class Pegasus :public Horse, public Bird//多继承
2. 2个继承一个的情况。Horse和bird都继承Animal的年龄,到了飞马Pegasus继承Horse和bird时,那到底继承哪个Animal的age呢?
这种情况就需要用到C++的高级特性,叫虚基类
虚基类专门解决,菱形多继承产生的二义性问题

/*
当class Horse:public Animal
//改成虚继承:
class Horse :virtual public Animal时,执行时horse就不会构造Animal了。
class Bird :virtual public Animal时,执行时bird就不会构造Animal了。
Pegaus飞马同时继承了Horse和Bird,就会直接构造Animal


--虚基类解决二义性问题
--虚基类的构造函数

java与c#没有多继承 */
#include 
using std::cout;
using std::endl;
enum COLOR {Red,Green,Blue,Yellow,White,Black,Brown};
class Animal
{
public:
	Animal(int);
	virtual ~Animal() { cout             
关注
打赏
1665060526
查看更多评论
0.0454s