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


赋值构造函数



禁止派生

