首页 > 解决方案 > c ++:如何从子类访问基类中的私有私有属性

问题描述

我想创建一个名为的基类Form和一个名为的子类ShrubberyCreationForm,问题是我必须使用子类为基类设置值。

我在构造函数中找到了解决它的解决方案,但我找不到复制构造函数和赋值运算符的方法。

基类:

class Form
{
    private:
        std::string             _Name;
        bool                    _isSigned;
        unsigned int            _reqGradeToSign;
        unsigned int            _reqGradeToExecute;
    public:
        Form();
        Form( std::string Name, unsigned int reqGradeToSign, unsigned int reqGradeToExecute );
        Form( const Form & src );
        ~Form();
        class GradeTooLowException: public std::exception
        {
            virtual const char * what() const throw();
        };
        class GradeTooHighException: public std::exception
        {
            virtual const char * what() const throw();
        };

        Form &                  operator = ( const Form & rhs );
        std::string             getName();
        bool                    getisSigned();
        unsigned int            getReqGradeToSign();
        unsigned int            getReqGradeToExecute();
        void                    beSigned( Bureaucrat & brc );
};

子类

class ShrubberyCreationForm: public Form
{
    public:
        ShrubberyCreationForm();
        ShrubberyCreationForm( std::string Name );
        ShrubberyCreationForm( const ShrubberyCreationForm & src );
        ~ShrubberyCreationForm();
        ShrubberyCreationForm & operator = ( const ShrubberyCreationForm & rhs );
};

CPP子类:

#include "ShrubberyCreationForm.hpp"

ShrubberyCreationForm::ShrubberyCreationForm(): Form() {}

ShrubberyCreationForm::ShrubberyCreationForm( std::string Name ): Form(Name, 145, 137)
{

}

ShrubberyCreationForm::~ShrubberyCreationForm()
{
}

// The problem here I don't know how to assign the values to the new object
ShrubberyCreationForm::ShrubberyCreationForm( const ShrubberyCreationForm & src )
{
}


ShrubberyCreationForm & ShrubberyCreationForm::operator=( const ShrubberyCreationForm & rhs )
{
    
}

标签: c++

解决方案


在 C++ 中执行此操作的常用方法是在您的超类中定义一个复制构造函数,该构造函数负责复制/分配给自身。然后,您的子类的复制构造函数和赋值运算符调用它来处理超类。因此,例如,复制构造函数如下所示:

ShrubberyCreationForm::ShrubberyCreationForm( const ShrubberyCreationForm & src )
  : Form{src}
{
}

看起来您已经在超类中定义了复制构造函数和赋值运算符,所以这是唯一缺少的部分。对于赋值运算符,这应该是:

Form::operator=(rhs);

推荐阅读