29 继承(一)

三种继承方式

这里写图片描述

#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_;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值