标签:
一个公有派生类的对象在使用上可以被当做基类的对象,反之禁止。
也就是说:1.派生类的对象可以赋值给基类的对象
如
B:public A A a; B b; a = b;//语法上是允许的
2、派生类的对象可以初始化基类的引用:
void f(A &a) {} int main() { B b; f(b); }
3、指向基类的指针可以指向派生类
A *p; p = new B();
例子:
#include <iostream> using namespace std; class B0 //基类B0声明 { public: void display(){cout<<"B0::display()"<<endl;} //公有成员函数 }; class B1: public B0 { public: void display(){cout<<"B1::display()"<<endl;} }; class D1: public B1 { public: void display(){cout<<"D1::display()"<<endl;} }; void fun(B0 *ptr) { ptr->display(); //"对象指针->成员名" } int main() //主函数 { B0 b0; //声明B0类对象 B1 b1; //声明B1类对象 D1 d1; //声明D1类对象 B0 *p; //声明B0类指针 p=&b0; //B0类指针指向B0类对象 fun(p); p=&b1; //B0类指针指向B1类对象 fun(p); p=&d1; //B0类指针指向D1类对象 fun(p); } 结果: B0::display() B0::display() B0::display() 注意:尽管是将派生的对象赋值给了基类的指针,但全部调用的基类的函数,因为在子类中的同名函数会被基类同名函数覆盖。
标签:
原文地址:http://www.cnblogs.com/defen/p/5344834.html