斗破C++编程入门系列之三十一:继承与派生:派生类对基类成员的访问控制之保护继承与私有继承(一星斗师)

斗破C++目录:

斗破C++编程入门系列之前言(斗之气三段)
斗破C++编程入门系列之二:Qt的使用介绍(斗之气三段)
斗破C++编程入门系列之三:数据结构(斗之气三段)
斗破C++编程入门系列之四:运算符和表达式(斗之气五段)
斗破C++编程入门系列之五:算法的基本控制结构之选择结构(斗之气八段)
斗破C++编程入门系列之六:算法的基本控制结构之循环结构(斗之气八段)
斗破C++编程入门系列之七:自定义数据类型(斗之气八段)
斗破C++编程入门系列之八:函数的定义与调用(斗之气八段)
斗破C++编程入门系列之九:函数重载与模板函数(斗之气九段)
斗破C++编程入门系列之十:类与对象:类的声明、成员的访问控制和对象(二星斗者)
斗破C++编程入门系列之十一:类与对象:构造函数和析构函数(四星斗者)
斗破C++编程入门系列之十二:类与对象:类的组合(五星斗者)
斗破C++编程入门系列之十三:类与对象:类模板(六星斗者)
斗破C++编程入门系列之十四:C++程序设计必知:作用域和可见性(六星斗者)
斗破C++编程入门系列之十五:C++程序设计必知:变量生存期(六星斗者)
斗破C++编程入门系列之十六:C++程序设计必知:类的静态成员(九星斗者)彩蛋)
斗破C++编程入门系列之十七:C++程序设计必知:友元(九星斗者)彩蛋)
斗破C++编程入门系列之十八:C++程序设计必知:常引用、常对象(九星斗者)彩蛋)
斗破C++编程入门系列之十九:C++程序设计必知:多文件结构和编译预处理命令(九星斗者)
斗破C++编程入门系列之二十:数组、指针和字符串:数组的声明和使用(一星斗师)
斗破C++编程入门系列之二十一:数组、指针和字符串:数组的存储与初始化、对象数组、数组作为函数参数(一星斗师)
斗破C++编程入门系列之二十二:数组、指针和字符串:指针变量的声明、地址相关运算–“*”和“&”(一星斗师)
斗破C++编程入门系列之二十三:数组、指针和字符串:指针的赋值和指针运算(一星斗师)
斗破C++编程入门系列之二十四:数组、指针和字符串:指向数组元素的指针和指针数组(一星斗师)
斗破C++编程入门系列之二十五:数组、指针和字符串:指针用作函数参数、指针型函数和函数指针(一星斗师)
斗破C++编程入门系列之二十六:数组、指针和字符串:动态内存分配和释放(一星斗师)
斗破C++编程入门系列之二十七:数组、指针和字符串:string类(一星斗师)
斗破C++编程入门系列之二十八:继承与派生:概念介绍与派生类的声明(一星斗师)
斗破C++编程入门系列之二十九:继承与派生:派生类从基类继承的过程(一星斗师)
斗破C++编程入门系列之三十:继承与派生:派生类对基类成员的访问控制之公有继承(一星斗师)
斗破C++编程入门系列之三十一:继承与派生:派生类对基类成员的访问控制之保护继承与私有继承(一星斗师)

鸡啄米C++

记住首页不迷路:
http://www.jizhuomi.com/software/129.html

斗破观看顺序:

https://v.haohuitao.cc/yhplay/336-1-2.html
第一季☞第二季前2集☞特别篇1☞第二季3~12集☞特别篇2沙之澜歌☞第三季☞第四季☞三年之约☞缘起☞年番
斗气大陆等级:
斗气有十一个阶别,斗之气,斗者,斗师,大斗师,斗灵,斗王,斗皇,斗宗,斗尊,斗圣,斗帝。
斗气大陆上很久没有出现过斗帝了。

一、夺回异火

美杜莎女王的行为引发了天地异像,为了族人的未来,她义无反顾的与异火进行着最后的抗争,然而在灵魂体与天雷触碰的一瞬间,她还是失败了,与天雷一并化做漫天的鳞羽。
正当萧炎准备用青莲台收取青莲地心火之时,一只可爱的小动物突然出现,原来她是美杜莎女王的伴生灵魂–紫幽炎蛇,是只六阶魔兽,没想到这所谓的进化,便是进化灵魂,用灵魂之力凝聚成真正的身体,若机缘足够,激发体内的远古巨兽血脉,就能进化为堪比斗宗强者的七彩吞天蟒。
神殿外,墨巴斯等人与丹王形成对峙之势,然而只有四人的蛇族还未曾有对付斗皇的能力,他们在等炎刺及南蛇等人。
殿内萧炎收下了紫幽灵蛇,同时收取了青莲地心火,看似顺利的局面是否真的如此,后续如何再来分解。

二、C++:派生类对基类成员的访问控制之保护继承与私有继承(一星斗师)

与公有继承不同,我们来看看保护继承及私有继承。

  • 在保护继承方式中,基类的公有成员和保护成员被派生类继承后变成派生类的保护成员,而基类的私有成员在派生类中不能访问。
  • 在私有继承方式中,基类的公有成员和保护成员被派生类继承后变成派生类的私有成员,而基类的私有成员在派生类中不能访问。

我们尝试将public继承改为protected继承,看看原先public属性的函数是否变成的protected。我们为远古灵蛇新增一个公有函数。

#ifndef ANCIENTSNAKE_H
#define ANCIENTSNAKE_H

#include <QDebug>


class AncientSnake
{
public:
    AncientSnake();

public:

    void use_ancient_fighting_skill(){
        qDebug() << "使用蛇族远古斗技";
    }

    void activate_bloodline(){
        qDebug() << "激活血脉";
    }

protected:
    void swallow_strange_fire(){
        qDebug() << "吞噬异火";
    }

private:
    void use_ancient_unique_skill(){
        qDebug() << "远古灵蛇独有的秘技";
    }

};

#endif // ANCIENTSNAKE_H

然后使用protected的方式继承,代码如下:

#ifndef QUEEN_H
#define QUEEN_H

#include "ancientsnake.h"
#include "person.h"

//美杜莎女王继承了远古斗技
//美杜莎女王继承了人类的形态
class Queen
 : protected AncientSnake
 , public Person<double>
{
public:
    Queen();

public:
    //定义与父类相同的成员函数
    void use_ancient_fighting_skill(){
        qDebug() << "使用蛇族远古斗技 升级版本";
    }

public:
    //定义与父类相同的成员变量
    QString name;

public:
    //定义自己的函数
    void use_secret_skill(){
       qDebug() << "使用蛇族秘术";

       //调用远古灵蛇的protected属性函数
       swallow_strange_fire();
    }

};

#endif // QUEEN_H

大家可以试试在main函数中使用meidusha能否成功调activate_bloodline。答案是不能的,因为是protected继承,原先public的属性变为了proteced,只能在类内部使用。
同样我们如果使用私有继承,那之前public及protected属性,在继承之后也都会变成private,只能在类内部调用,外部不可调用。可以修改代码,看看原先的程序报什么错误。

#ifndef QUEEN_H
#define QUEEN_H

#include "ancientsnake.h"
#include "person.h"

//美杜莎女王继承了远古斗技
//美杜莎女王继承了人类的形态
class Queen
 : private AncientSnake
 , public Person<double>
{
public:
    Queen();

public:
    //定义与父类相同的成员函数
    void use_ancient_fighting_skill(){
        qDebug() << "使用蛇族远古斗技 升级版本";
    }

public:
    //定义与父类相同的成员变量
    QString name;

public:
    //定义自己的函数
    void use_secret_skill(){
       qDebug() << "使用蛇族秘术";

       //调用远古灵蛇的protected属性函数
       swallow_strange_fire();
    }

};

#endif // QUEEN_H

其实我们很少会使用protected及private继承,因为继承的目的之一是复用代码,使用这两种继承方式,相当于断了后面想要继承的类的复用。

三、英语

先看几个单词:

  • protected 保护的
  • private 私有的
  • swallow 吞咽
  • strange 奇异的

再看几个句子:

  • For(为了) the future(未来) of her (她的)people(族人), she (她)fought(战斗) against(对抗) the flames(异火) without hesitation(没有任何犹豫) in(在) the final(最后) battle(战争).
  • 为了族人的未来,她义无反顾的与异火进行着最后的抗争。

For 引导了原因状语从句。
without hesitation 义无反顾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

可峰科技

生活不易

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

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

打赏作者

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

抵扣说明:

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

余额充值