c++学习之赋值兼容规则

来源:互联网 发布:网络流行语2016搞笑 编辑:程序博客网 时间:2024/06/01 07:46

规则一:
派生类的对象可以给基类对象赋值(因为在继承的时候c继承了父类的信息,可以在进行了对象切片后给子类中相应的父类信息段赋值)
eg:

class base{public:    base(){}    ~base(){}public:    int x;};class D : public base{public:    D(){}    ~D(){}public:    int y;};int main(){    D d;    base b;    b = d;   //用父类对象给派生类对象赋值,反过来不可以    return 0;}

规则二:
可以将一个派生类的对象的地址赋值给其基类的指针变量;
并且只能通过该指针访问派生类中的由基类继承来的隐藏对象,不能访问派生类的新成员;
eg:

class base{public:    base(){}    ~base(){}public:    void show(){}public:    int x;};class D : public base{public:    D(){}    ~D(){}public:    void show(int){}    void print(){}public:    int y;};int main(){    D d;    base b;    base *pb;    pb = &d;    pb->show();   //此处访问的是父类的show方法(因为用的是父类的指针,所以只能访问父类的信息)    pb->show(2);   //错误,因为父类没有带参数的show()方法 }

规则三:
派生类对象可以初始化基类的引用; 引用就是一个别名;
并且这个别名只能包含派生类对象中由父类继承来的隐藏对象

class base{public:    base(){}    ~base(){}public:    void show(){}public:    int x;};class D : public base{public:    D(){}    ~D(){}public:    void show(int){}    void print(){}public:    int y;};int main(){    D d;    base b;    base &pb = d;  //派生类对象初始化基类的引用    pb.show();  //访问的是父类的show方法}

要想让其调用子类的方法就要在父类中将与子类的同名同参数,同返回值的方法加virtual关键字就可以调用子类的方法(也就是多态)

class base{public:    base(){}    ~base(){}public:    virtual void show(){}public:    int x;};class D : public base{public:    D(){}    ~D(){}public:    void show(int){}    void print(){}public:    int y;};int main(){    D d;    base b;    base *pb;    pb = &d;    pb->show();  //调用的是子类的show方法(有了多态)    base &bf = d;    bf.show();   //调用的是子类的show方法(多态)}
2 0