我现在正在学习 C++ 类(class),他们在对所有内容进行过度解释方面做得很好,直到涉及到在标题“ promise ”和实现之间拆分文件。我完全是用 Python 学习编程的,所以我习惯于直接声明事物并在必要时导入类,所以这整个分离 promise 然后实现逻辑对我来说很奇怪。
无论如何,我遇到了麻烦,因为在类(class)中他们说你实际上永远不需要使用 this->
但是当我试图在同一个 .cpp 文件中明确定义一个类时,我只能在使用 this->
时让构造函数工作。有人可以解释或链接解释这个的讨论吗?在同一文件中定义所有内容的上下文中,我一直无法找到解释此问题的引用。
class Person {
public:
string name;
int age;
int height;
int weight;
Person (string name, int age, int height, int weight) {
name = name;
age = age;
height = height;
weight = weight;
}
};
int main () {
Person new_person("Doug", 20, 70, 170);
}
这导致我从主函数传入的所有值都没有初始化。但是,如果我将 this-> 添加到构造函数中的每一行,它就可以正常工作。我找到的示例不使用 this->
所以我很困惑为什么这里有必要。也许它与命名空间有关,这对我来说仍然有点困惑(整个 using namespace std; 事情)但我认为因为它们都在同一个 .cpp 文件中,所以这应该有效。
最佳答案
参数变量掩盖您的构造函数范围内的成员变量。也就是说,在该上下文中,name
仅指输入变量。
你可以做的是使用一个初始化列表:
Person (string name, int age, int height, int weight) :
name(name), age(age), height(height), weight(weight) {}
或者使用不同的名字:
Person (string _name, int _age, int _height, int _weight) {
name = _name;
age = _age;
height = _height;
weight = _weight;
}
但是您使用 this->
的方法完全没问题。
您可能还想阅读 http://www.cs.technion.ac.il/users/yechiel/c++-faq/using-this-in-ctors.html
关于C++ 基本类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52024170/