12.2派生类对象替换基类对象原则凡是基类对象出现的场合都可以用公有派生类对象取代对象替换常用的形式:(1)派生类对象给基类对象赋值(2)派生类对象可以初始化基类对象的引用(3)可以令基类对象的指针指向派生类对象,即将派生类对象的地址传递给基类指针注:派生类对象替换基类对象后,只能当作基类对象使用
5 12.2 派生类对象替换基类对象 原则 凡是基类对象出现的场合都可以用公有派生类对象取代 , 对象替换常用的形式 : (1)派生类对象给基类对象赋值 (2)派生类对象可以初始化基类对象的引用 (3)可以令基类对象的指针指向派生类对象,即将派生 类对象的地址传递给基类指针 注:派生类对象替换基类对象后,只能当作基类对象使用
例12-1派生类对象替换基类对象宠物classPet( public:void speak()( cout<<" How does a pet speak ?"; };1;classCat:public Pet(public:void speak()(cout<<"miao!miao!";);class Dog:public Petpublic:宁void speak()cout<<"wang!wang!";)3;
6 例12-1 派生类对象替换基类对象 class Pet //宠物 { public: void speak() { cout<< " How does a pet speak ? "; }; }; class Cat : public Pet { public: void speak() { cout<< "miao!miao!"; } }; class Dog : public Pet { public: void speak() { cout<< "wang!wang!"; } };
int main(){Pet pet,*p1;/基类对象指针p1,基类对象petDog dog1;Cat cat1;Ⅱ用Dog类对象给Pet类对象赋值pet = dog1;pet.speak();p1 = &cat1;Ⅱ用Cat类对象地址给基类指针赋值p1->speak();
7 int main() { Pet pet, *p1; //基类对象指针p1, 基类对象pet Dog dog1; Cat cat1; pet = dog1; //用Dog类对象给Pet类对象赋值 pet.speak(); p1 = &cat1; //用Cat类对象地址给基类指针赋值 p1->speak();
p1=&dog1;I用Dog类对象地址给基类指针赋值p1->speak();以Cat类对象初始化Pet类引用Pet &pet2=cat1:pet2 .speak();return 0;speak?HowdoespetHowpet speak?doesaapet speak?Howdoesaspeak?Howdoespeta0
8 p1 = &dog1; //用Dog类对象地址给基类指针赋值 p1->speak(); Pet &pet2 = cat1; //以Cat类对象初始化Pet类引用 pet2 .speak(); return 0; }
12.3虚函数虚函数的定义定义:在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数语法:函数返回类型virtual函数名(参数表)函数体人Y用途实现多态性,通过指向派生类的基类指针或基类对象的引用,访问派生类中同名覆盖成员函数
9 12.3 虚函数 一、虚函数的定义 定义: 在某基类中声明为 virtual 并在一个或多个派生类中 被重新定义的成员函数 语法: virtual 函数返回类型 函数名(参数表) { 函数体 } 用途: 实现多态性,通过指向派生类的基类指针或基类对 象的引用,访问派生类中同名覆盖成员函数