C++子类如何访问基类私有属性 实现拷贝构造与赋值运算符
正确实现代码
拷贝构造函数实现
直接在初始化列表调用基类的拷贝构造即可复用基类已有的拷贝逻辑:
ShrubberyCreationForm::ShrubberyCreationForm( const ShrubberyCreationForm & src ) : Form(src) { // 如果后续子类新增了自定义成员,在这里补充子类成员的拷贝逻辑即可,当前子类无额外成员无需写额外代码 }
赋值运算符重载实现
先显式调用基类的赋值运算符完成基类属性赋值,再处理子类自有属性:
ShrubberyCreationForm & ShrubberyCreationForm::operator=( const ShrubberyCreationForm & rhs ) { if (this != &rhs) { // 调用基类赋值运算符完成基类部分的属性赋值 Form::operator=(rhs); // 如果后续子类新增了自定义成员,在这里补充子类成员的赋值逻辑即可,当前子类无额外成员无需写额外代码 } return *this; }
逻辑说明
基类的私有成员子类没有直接访问权限,不需要手动逐个给基类属性赋值,直接复用基类已经实现的拷贝构造、赋值运算符逻辑即可。子类对象可以自动向上转型为基类引用,直接传入基类的对应函数就能完成基类部分的拷贝/赋值操作。
额外优化提示:建议把基类中的getName()、getisSigned()等getter方法加上const修饰,比如修改为std::string getName() const;,方便在const对象场景下正常调用。
内容的提问来源于stack exchange,提问作者DarkSide77
相关产品推荐
相关产品推荐

