Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 继承和少量参数_C++_Inheritance_Parameters - Fatal编程技术网

C++ 继承和少量参数

C++ 继承和少量参数,c++,inheritance,parameters,C++,Inheritance,Parameters,Bob叔叔在其干净的代码中建议,一个函数应该得到的参数不超过3个: 具有三个参数的函数更难实现 比二人组更能理解。排序、暂停和忽略的问题 增加了一倍多。我建议你以前仔细考虑一下 创建一个三元组 但是类继承层次结构中的CTOR参数呢?如果层次结构中的每个类都添加了一个新字段,那么您应该在CTOR中初始化它们。请参见下面的示例: class Person { private: std::string m_name; int m_age; public: Person(con

Bob叔叔在其干净的代码中建议,一个函数应该得到的参数不超过3个:

具有三个参数的函数更难实现 比二人组更能理解。排序、暂停和忽略的问题 增加了一倍多。我建议你以前仔细考虑一下 创建一个三元组

但是类继承层次结构中的CTOR参数呢?如果层次结构中的每个类都添加了一个新字段,那么您应该在CTOR中初始化它们。请参见下面的示例:

class Person
{
private:
    std::string m_name;
    int m_age;

public:
    Person(const std::string& name, const int age);
    std::string getName() const { return m_name; }
    int getAge() const { return m_age; }
    ~Person();
};


class Student : public Person
{
private:
    std::string m_university;
    int m_grade;

public:
    Student(const std::string& name, const int age, const std::string& university, const int grade);
    std::string getUniversity() const { return m_university; }
    int getGrade() const { return m_grade; }
    ~Student();
};

查看
Student
如何获取4个参数,而
Person
仅获取2个参数,而
Student
又添加了两个参数。那么我们应该如何处理呢?

有几种方法

将多个参数组合成一个
struct

默认初始化数据成员并使用setter实用程序设置它们


我认为这只是一个建议。这完全取决于你——你的函数应该有多少个参数

但是,如果您更愿意遵循规则,请设置一些参数,例如:

class Student
{
  public:
    struct StudentParameters
    {
      ...
    };
    Student(name, age, const StudentParameters &sp);
...
};

您混淆了单词
function
的两个不同含义

第一个含义与单词的原始数学含义更相关。在这种情况下,
函数
是一个或多个输入与一个输出之间的命名关系。“干净代码”规则就是指这个意思,并告诉您更多应限制为3个输入

<> > C++中的另一个含义是指代码块,它可以或可能有输入,它可以或可能有输出,它可以或可能有名称。p>
是的,即使在后一种意义上,构造函数也是不寻常的函数。它们从来没有返回类型,甚至没有
void
,也没有名称。因此,您可以合理地解释,当涉及到输入参数的数量时,它们也是特殊的。

您可能只想将其命名为
Parameters
,因此从外部将其范围限定为
Student::Parameters
。是的。我只是给出了解决方案的抽象视图:)
Person::Person() : m_age(0) {}
void Person::set_age(int age) { m_age = age; }

Student() : m_grade(0) {} // Person is default constructed.
void Student::set_grade(int grade) { m_grade = grade; }
class Student
{
  public:
    struct StudentParameters
    {
      ...
    };
    Student(name, age, const StudentParameters &sp);
...
};