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

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

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


赋值构造函数


禁止派生

相关推荐
旖-旎3 分钟前
二分查找(x的平方根)(4)
c++·算法·二分查找·力扣·双指针
用头发抵命14 分钟前
Vue 3 中优雅地集成 Video.js 播放器:从组件封装到功能定制
开发语言·javascript·ecmascript
似水明俊德27 分钟前
02-C#.Net-反射-学习笔记
开发语言·笔记·学习·c#·.net
顶点多余32 分钟前
使用C/C++语言链接Mysql详解
数据库·c++·mysql
汉克老师36 分钟前
GESP2026年3月认证C++四级( 第二部分判断题(1-10))
c++·指针·函数重载·文件操作·数组·gesp4级·gesp四级
于先生吖1 小时前
Java框架开发短剧漫剧系统:后台管理与接口开发
java·开发语言
adore.9681 小时前
3.18 复试学习
学习
khddvbe1 小时前
C++并发编程中的死锁避免
开发语言·c++·算法
留白_1 小时前
MySQL学习(9)——索引
学习
请你喝好果汁6412 小时前
生信学习笔记:ArchR 处理小麦单细胞 ATAC-seq 中的细胞数差异与 Embedding 报错调试
学习