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

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

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


赋值构造函数


禁止派生

相关推荐
卷无止境1 小时前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境2 小时前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
郝学胜_神的一滴1 天前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
卷无止境3 天前
C++ 的Eigen 库全解析
c++
卷无止境3 天前
现代 C++特性大盘点:一门脱胎换骨的老语言
c++·后端
郝学胜_神的一滴3 天前
CMake 27:缓存变量的特性、语法、类型与实操全解
c++·cmake
博客18005 天前
酷宝的使用方法,超好用的免费界面库,C++、MFC可用
c++·mfc·界面库·库来帮·酷宝
郝学胜_神的一滴5 天前
CMake 026:属性体系精讲、四大作用域全解 & 实战代码落地
c++·cmake
众少成多积小致巨6 天前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
clint45610 天前
C++进阶(1)——前景提要
c++