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成员可以被派生类的函数成员访问。

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

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


赋值构造函数


禁止派生

相关推荐
大模型码小白6 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
_wyt0018 小时前
多重背包问题详解
c++·背包dp
段一凡-华北理工大学8 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe9 小时前
C++——多态
开发语言·c++
遇乐的果园9 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
越甲八千9 小时前
STL stack为何没有迭代器
c++
心平气和量大福大9 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
遇乐的果园10 小时前
前端学习笔记-vue状态管理优化
前端·笔记·学习
从零开始的代码生活_11 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸11 小时前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++