gpt4 book ai didi

C++ 构造函数

转载 作者:行者123 更新时间:2023-11-30 01:45:44 25 4
gpt4 key购买 nike

所以我正在为我的 C++(和一般编程)第一学期做期末复习表,我遇到了这个问题:

Write a class Person with private members string name, string idNum, in addition to a class Student which inherits from Person with private members string major, int gradYear. Implement the constructors, getters and setters.

我最终回顾了构造函数并决定观看一些 YouTube 视频来澄清一些事情并消除我在类里面可能产生的一些潜在误解。现在据我了解,如果我只是为成员“name”做这件事,它应该看起来像这样:

class Person
{
public:
Person(string z)
{
setName(z);
}
void setName(string x)
{
name = x;
}
string getName()
{
return name;
}
private:
string name;
};

(请让我知道我一开始是否做对了)

然后我看了我教授的一些例子,在其中一个例子中他写了以下类(class):

class Shape 
{
public:
void setPosition(int x, int y)
{
xpos = x; ypos = y;
}
double getArea()
{
return 0;
}//return length * width; }
private:
int xpos, ypos, name;
};

这是我感到困惑的地方,因为如果我要遵循这个约定,我不会包括任何 setter ?如果没有 setter ,我的答案在功能上是否相同,然后看起来像这样?

编辑:哎呀,这个例子确实有一个 setter,我一定是把它和构造函数本身混淆了,除非它实际上是两者?

class Person
{
public:
Person(string z)
{
setName(z);
}
string getName()
{
return name;
}
private:
string name;
};

我知道这个问题也确实专门询问了 setter/getter ,但我只是想澄清一些事情,因为似乎有一些相互矛盾的信息。

最佳答案

您可以将构造函数视为设置成员属性的实例化程序。不同之处在于构造函数只为一个对象调用一次。假设您有一个类,其中的字段不会更改 - 如果您编写一个公共(public) setter,这将是不正确的。

考虑一下拥有社会安全号码的美国人的情况。是awfully rare to change your SSN ,因此如果您要为美国人(人)建模,则可能不包括 set_ssn 方法。

class American {
public:
American(std::string name, std::string ssn) {
name_ = name;
ssn_ = ssn;
}
void interact() { /* do my living stuff */ }
private:
std::string name_;
std::string ssn_;
};

现在你可以这样使用了:

American erip("Elijah", "mysecretssn");
erip.interact();
...

如果我经常改变我的头发颜色,你可以在我的类中添加一个 set_hair_color 方法。

void set_hair_color(const std::string hair_color);

还有一个std::string hair_color_给我的私有(private)成员。

现在我可以这样做了:

American erip("Elijah", "mysecretssn");
erip.interact();
erip.set_hair_color("black");
erip.set_hair_color("red");
...

总而言之,如果您的个人情况发生变化,您将编写 setter,但所有成员函数都可以访问私有(private)变量,因此可以更改它们。 Setter 是一种向您的代码用户“公开”您的成员变量的方法。

关于C++ 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34132426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com