- 派生类对象可以赋值给基类对象.
base b;
derived d;
d=b;
把派生类对象拥有的成员数据(基类也拥有的那些)拷贝过去。但基类不可以给派生类赋值,因为派生类有的基类可能木有。- 派生类对象可以初始化基类引用
base& b = d
- 派生类对象地址可以赋值给基类指针
base* pb = &d
.然后pb指的是派生类对象的基类公有部分,所以派生类有的基类没得那些你用不了。但是派生类指针不能指向基类对象地址,因为派生类有的你没得,你用个屁啊。
直接基类和间接基类
A派生B,B派生C,C派生D
A是B的直接基类,A是C的间接基类
声明派生类,只要列出直接基类即可。派生类会沿着类层次自动向上级继承所有间接基类。所以派生类包括自己定义的成员,直接基类和间接基类的所有成员。
#include<iostream>
using namespace std;
class son1
{
public:
son1(){
cout<<"Son1 constructor called\n";}
~son1(){
cout<<"Son1 destructor called\n";}
} ;
class son2:public son1
{
public:
son2():son1(){
cout<<"Son2 constructor called\n";}
~son2(){
cout<<"Son2 destructor called\n";}
};
class son3:public son2
{
public:
son3():son2(){
cout<<"Son3 constructor called\n";}
~son3(){
cout<<"Son3 destructor called\n";}
};
int main()
{
son3 s;
}