C++ 类的学习(四) 继承

cpp 复制代码
class CBox
{
public:
  //继承 数据成员
  double length;
  double width;
  double height;

  //不继承 构造函数(包括复制构造函数)、析构函数、重载赋值运算符(=)
  explicit CBox(double lv = 1.0, double wv = 1.0, double hv = 1.0) : length{ lv }, width{ wv }, height{ hv } {}
  CBox(const CBox& box) {}
  CBox& operator=(const CBox& box) {}

  //继承 其他重载运算符、其他函数成员
  double volume() const
  {
      return length * width * height;
  }
  bool operator < (const CBox& aBox) const
  {
      return this->volume() < aBox.volume();
  }
};



class CCandyBox : CBox //:CBox 表示从CBox继承
{
public:
    //新增的数据成员
    char* contents;

    //不继承  构造函数(包括复制构造函数)、析构函数、重载赋值运算符(=)
    explicit CCandyBox(const char* str = "Candy")               // Constructor
    {
        size_t length{ strlen(str) + 1 };

        contents = new char[length];
        strcpy_s(contents, length, str);
    }

    CCandyBox(const CCandyBox& box) = delete; //= delete 关键字允许开发者显式禁止编译器自动生成某些函数
    CCandyBox& operator=(const CCandyBox& box) = delete;

    ~CCandyBox()                                                // Destructor
    {
        delete[] contents;
    }

    //新增的函数成员
    void boxShow()
    {
        std::cout << contents << std::endl;
    }
};

基类中的private数据成员,派生类中的成员函数不能访问。

只能通过基类的非private函数成员(public、protect)才能访问。

类的protect成员只能被类的成员函数和友元函数访问。

基类的protect成员可以被派生类的函数成员访问。

派生类不继承基类的构造函数、析构函数和赋值运算符,但他们仍存在于基类中。

基类的构造总是先于派生类。


赋值构造函数


禁止派生

相关推荐
夏霞38 分钟前
c# ASP.NET Core SignalR 客户端与服务端自动重连配置指南
开发语言·c#·asp.net
重启编程之路1 小时前
python 基础学习socket -TCP编程
网络·python·学习·tcp/ip
石像鬼₧魂石1 小时前
Kali Linux 中对某(靶机)监控设备进行漏洞验证的完整流程(卧室监控学习)
linux·运维·学习
小张成长计划..1 小时前
【C++】2:cin和cout的介绍和使用,函数的缺省参数
c++
@老蝴1 小时前
Java EE - 常见的死锁和解决方法
java·开发语言·java-ee
再卷也是菜2 小时前
C++篇(17)哈希拓展学习
c++·哈希
d111111111d2 小时前
STM32通信协议学习--I2C通信(了解)
笔记·stm32·单片机·嵌入式硬件·学习
“愿你如星辰如月”2 小时前
Linux:进程间通信
linux·运维·服务器·c++·操作系统
盼哥PyAI实验室2 小时前
学会给网页穿衣服——学习 CSS 语言
前端·css·学习
我的xiaodoujiao2 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 25--数据驱动--参数化处理 Excel 文件 2
前端·python·学习·测试工具·ui·pytest