C++基础:继承访问属性

继承访问属性:

继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构。体现了由简单到复杂的认识过程。

层次概念是计算机的重要概念。通过继承的机制可对类分层,提供类型/子类型的关系。

C++通过类派生的机制来支持继承。被继承的类称为基类或超类,新产生的类为派生类或子类。

基类和派生类的集合称作类继承层次结构。
    
如果基类和派生类共享相同的公有接口,则派生类被称作基类的子类型。
       
派生反映了事物之间的联系,事物的共性与个性之间的关系。 
派生与独立设计若干相关的类,前者工作量少,重复的部分可以从基类继承来,不需要单独编程。

由基类派生出派生类的定义的一般形式为:

class 派生类名:访问限定符  基类名1,访问限定符 基类名2
{
......
};
其中基类1,基类2,……是已声明的类。
 
在派生类定义的类体中给出的成员称为派生类成员,它们是新增加成员,它们给派生类添加了不同于基类的新的属性和功能。派生类成员也包括取代基类成员的更新成员。

如果一个派生类可以同时有多个基类,称为多重继承,这时的派生类同时得到了多个已有类的特征。
一个派生类只有一个直接基类的情况称为单一继承。

子类继承父类成员后的属性变化:

1.对公有继承:
子类继承的父类成员属性不变;
2.对保护继承:
子类继承的父类成员公有属性变为保护属性,保护和私有属性不变
3.对私有继承:
子类继承的父类成员所有属性变为私有属性。

*子类的所有方法都可以直接访问公有和保护成员;
*对象只能直接访问公有成员;
*当发生私有继承时,父类结束往下继承;

举例:

<span style="font-size:18px;">#include <iostream>
using namespace std;

class Base
{
public:
    Base():data(0)
    {
    }
    ~Base()
    {
    }
public:
    void Show_Base()const
    {
        cout<<"Show Base:"<<data<<endl;
    }
protected:
    void Print_Base()const
    {
        cout<<"Print Base:"<<data<<endl;
    }
private:
    int data;
};


///对子类的方法来说:

class D : public Base
{
public:
    D():x(0)
    {
    }
    ~D()
    {
    }
public:
    void Show_D()const   //1.子类的方法可以直接访问父类的公有和保护成员,而不能直接访问父类私有成员
    {
        Print_D();        //2.子类的方法可以通过调用父类的公有和保护成员,来间接访问父类的私有成员
        Print_Base();
    }
protected:
    void Print_D()const
    {
        Show_Base();
        cout<<"Print D:"<<endl;
    }
private:
    int x;
};

int main()
{
    D d;
    d.Show_Base();       //1.子类的对象可以直接访问父类的公有成员
    //d.Print_D();           //错误,2.子类的对象不能访问自身的保护和私有成员
    //d.Print_Base();     //错误,3.子类的对象更不能直接访问父类的保护和私有成员

    d.Show_D();       //4.子类的对象可以通过调用自身的公有方法(或通过公有方法调用的保护方法)去访问父类的保护成员
    
    return 0;
}</span>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值