C+笔记七十九:C+继承中的类型兼容性原则

依法编程Autocodes

欢迎各位小伙伴关注”依法编程“,一起交流

类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。

类型兼容规则中所指的替代包括以下情况:

(1)子类对象可以当作父类对象使用;

(2)子类对象可以直接赋值给父类对象;

(3)子类对象可以直接初始化父类对象;

(4)父类指针可以直接指向子类对象;

(5)父类引用可以直接引用子类对象。

在替代之后,派生类对象就可以作为基类的对象使用,但是只能使用从基类继承的成员。类型兼容规则是多态性的重要基础之一。

程序案例:

#include

usingnamespacestd;

//基类

classAnimal

{

public:

Animal()

{}

~Animal()

{}

voidprintA()

{

cout

}

protected:

private:

inta;

intb;

};

//派生类

classDog:publicAnimal

{

public:

Dog()

{}

~Dog()

{}

voidprintD()

{

cout

}

protected:

private:

intc;

};

voidhowToPoint(Animal *base)

{

base->printA();//基类的成员函数

}

voidhowToPoint2(Animal &base)

{

base.printA();//基类的成员函数

}

/*

类型兼容规则中所指的替代包括以下情况:

(1)派生类对象可以当作基类对象使用;

(2)派生类对象可以直接赋值给基类对象;

(3)派生类对象可以直接初始化基类对象;

(4)基类指针可以直接指向派生类对象;

(5)基类引用可以直接引用派生类对象。

*/

intmain()

{

Animal animal;

animal.printA();//基类调用基类自己的函数

Dog dog;

dog.printD();//派生类调用自己的函数

//(1)派生类对象可以当作基类对象使用

dog.printA();//派生类调用基类的函数

//(2)派生类对象可以直接赋值给基类对象

animal=dog;

//(3)派生类对象可以直接初始化基类对象

Animal animal2=dog;//会调用拷贝构造函数

//不能用基类对象初始化派生类对象

//Dog dogg=animal;

//(4.1)基类指针可以直接指向派生类对象

Animal *p=NULL;//基类指针

p=&dog;//指向派生类对象

p->printA();//派生类继承了printA,就是通过指针访问派生类中的printA

//(4.2)指针作函数参数

howToPoint(&animal);//传递基类对象的地址

howToPoint(&dog);//派生类对象的地址传递给基类对象的指针

//(4.3)引用作函数参数

howToPoint2(animal);//传递基类对象的引用

howToPoint2(dog);//派生类对象的引用传递给基类对象的引用

//(5)基类引用可以直接引用派生类对象

Animal &animal3=dog;

system("pause");

return0;

}

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180822A0R91800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券