C++ 基本类构造函数

标签 c++ class oop constructor

我现在正在学习 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/

相关文章:

c++ - SSE 内在函数 - 比较 if/else 优化

c++ - 如何检测我是否正在使用特定的 Visual Studio 版本编译代码?

swift - 将具有嵌套自定义类的自定义类数组存储到 standardUserDefaults

javascript - OOP访问html5视频变量

design-patterns - 有没有关于这种编程的文献?

c++ - 我应该如何在我自己的函数中传递 boost::asio::yield_context?

java - 检查对象是否是用户指定的特定数据类型的实例

c++ - 类循环

javascript - 如何正确设置原型(prototype)?

python - 在 python 而不是 C++ 中替代读取二进制文件