依法编程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;
}
领取专属 10元无门槛券
私享最新 技术干货