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