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成员可以被派生类的函数成员访问。
派生类不继承基类的构造函数、析构函数和赋值运算符,但他们仍存在于基类中。
基类的构造总是先于派生类。


赋值构造函数



禁止派生
