C++继承的三种方式[ACCESS]

C++继承的定义

两个类的继承关系在派生类中声明,派生类定义使用以下语法:
class DerivedClass: [ACCESS] BaseClass{
//
};
冒号(:)后的[ACCESS]是继承的最高权限级别符,可以是以下三个值(存取权限级别)的其中之一:
public,公共权限,三级(高)
protected,保护权限,二级
private,私有权限,一级(低)
由[ACCESS]的这三个值,从而引出了C++继承的三种方式:
1、公共继承,[ACCESS]是public
2、保护继承,[ACCESS]是protected
3、私有继承,[ACCESS]是private
首先明确一点:基类BaseClass的private成员,在派生类DerivedClass中是无法访问,即不能被继承。

最高权限级别符[ACCESS]

最高权限级别符[ACCESS]的意思是:
在派生类DerivedClass中,继承自基类BaseClass的成员的级别,高于[ACCESS]级别的都将被视为[ACCESS]级别;等于、低于[ACCESS]级别的,原样不动。基类BaseClass的private成员不被继承。

C++继承的三种方式详解如下:

一、公共继承,[ACCESS]是public

[ACCESS]为public时,基类BaseClass的成员级别在派生类DerivedClass中都不变,即public的继续是public、protected的继续是protected,private不被继承。

二、保护继承,[ACCESS]是protected

[ACCESS]为protected时,在派生类DerivedClass中,基类BaseClass的成员级别是public的修改为protected,原来是protected的继续是protected,private不被继承。

三、私有继承,[ACCESS]是private

[ACCESS]为private时,在派生类DerivedClass中,基类BaseClass的成员级别是public和protected的都修改为private,基类BaseClass的private成员不被继承。

实例源码

源码中注释内容有错误两字时,表示此行会发生编译错误,将对应行前的注释删除,再编译即可重现错误
D:\YcjWork\CppTour>vim c2006.cpp

#include <iostream>
using namespace std;

/**
 * 类继承的3种方式
*/

// 基类
class Base {
public:
    int pub;
protected:
    int prot;
private:
    int priv;
};
 
// 公有继承
class PublicDerived : public Base {
public:
    void test() {
        pub = 1; // 正确,Base的public成员
        prot = 1; // 正确,Base的protected成员继承为protected
        // priv = 1; // 错误,Base的private成员不可访问
    }
};
 
// 保护继承
class ProtectedDerived : protected Base {
public:
    void test() {
        pub = 1; // 正确,Base的public成员变为protected
        prot = 1; // 正确,Base的protected成员保持为protected
        // priv = 1; // 错误,Base的private成员不可访问
    }
};

// 私有继承
class PrivateDerived : private Base {
public:
    void test() {
        pub = 1; // 正确,Base的public成员变为private
        prot = 1; // 正确,Base的protected成员变为private
        // priv = 1; // 错误,Base的private成员仍不可访问
    }
};
 
int main() {
    PublicDerived pub_derived;
    PrivateDerived priv_derived;
    ProtectedDerived prot_derived;
    
    // 测试基类的访问权限
    pub_derived.pub = 2; // 正确,PublicDerived的public成员
    // prot_derived.pub = 1; // 错误,ProtectedDerived的protected基类成员不可访问
	// priv_derived.pub = 1; // 错误,PrivateDerived的private基类成员不可访问
	cout << "pub_derived.pub: " << pub_derived.pub << endl;
	//cout << "prot_derived.pub: " << prot_derived.pub << endl; // 错误,ProtectedDerived的protected基类成员不可访问
	//cout << "priv_derived.pub: " << priv_derived.pub << endl; // 错误,PrivateDerived的private基类成员不可访问

    return 0;
}

编译运行

D:\YcjWork\CppTour>gpp c2006

D:\YcjWork\CppTour>g++ c2006.cpp -o c2006.exe

D:\YcjWork\CppTour>c2006
pub_derived.pub: 2

D:\YcjWork\CppTour>

运行截屏
C++继承的三种方式

(全文完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ycjnx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值