29 继承(一)

来源:互联网 发布:mac如何移动桌面图标 编辑:程序博客网 时间:2024/04/29 05:10

三种继承方式

这里写图片描述

#include <iostream>using namespace std;class Base{public:    int x_;protected:    int y_;private:    int z_;};class PublicInherit : public Base//公有继承{public:    void Test()    {        x_ = 10;        y_ = 20;        //z_ = 30;//基类私有成员无法直接访问    }private:    int a_;};class PublicPublicInherit : public PublicInherit{public:    void Test()    {          y_ = 20;    }};class PrivateInherit : private Base//私有继承{public:    void Test()    {        x_ = 10;        y_ = 20;        //z_ = 30;    }};int main(void){    PublicInherit pub;    pub.x_ = 20;    PrivateInherit pri;    //pri.x_ = 10;    return 0;}

接口继承与实现继承

将类的公有成员函数称为接口
公有继承,基类的公有成员函数在派生类中仍然是公有的,换句话说是基类的接口成为派生类的接口,因而将它称为接口继承。
实现继承,对于私有、保护继承,派生类不继承基类的接口。派生类将不再支持基类的公有接口,它希望能重用基类的实现而已,因此将它称为实现继承。

继承与重定义

对基类的数据成员的重定义
对基类成员函数的重定义分为两种
overwrite
与基类完全相同
与基类成员函数名相同,参数不同
override

#include <iostream>using namespace std;class Base{public:    Base() :x_(0)    {    }    int GetBaseX() const    {        return x_;    }    void Show()    {        cout << "Base::Show ..." << endl;    }    int x_;};class Derived : public Base{public:    Derived() : x_(0)    {    }    int GetDerivedX() const    {        return x_;    }    void Show(int n)    {        cout << "Derived::Show " << n << endl;    }    void Show()    {        cout << "Derived::Show " << endl;    }    int x_;//重定义时隐藏了基类的成员};int main(void){    Derived d;    d.x_ = 10;    cout << d.GetBaseX << endl;    cout << d.GetDerivedX() << endl;    d.Show();//调用派生类不带参数的Show    d.Base::Show();//调用基类Show    return 0;}
class A{public:    void FunA()    {        ...    }};//组合、将一个类作为另一个类的对象成员。委托class B{public:    void FunB()    {        a.FunA();    }private:    A a_;};
0 0
原创粉丝点击