c++ 这个指针不执行构造函数

标签 c++

#include <iostream>
using namespace std;
class A {
public:
    int val;
    A(){
        val=0;
    }
    A( int n){
        val=n;
    }
    A GetObj(){
        return *this;
    }
};
main()  {
    A a;
    cout << a.val << endl;
    a.GetObj() = 5;
    cout << a.val << endl;
}

输出是 0 0 但我想实现 0 5个 那么我应该如何更改 GetObj 函数呢? 非常感谢!

最佳答案

现在,GetObj() 按值返回 A,因此它实际上返回了 *this 的拷贝。返回的对象不是 a - 它是一个全新的实体,从 a 创建。要使其正常工作,您需要通过引用将其返回:

A& GetObj(){
    return *this;
}

不过,最好的解决方案是(恕我直言)为 val 添加一个 setter:

class A {
public:
    //other things..

    void SetValue(int value) {
        this->val = value;
    }
};

然后:

a.SetValue(5);

关于c++ 这个指针不执行构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31765917/

相关文章:

c++ - 使用 Swift 桥接 header “C 不支持默认参数”

c++ - "using"与基类名称更改访问有效吗?

c++ - 与 FFT 的卷积,这是如何工作的?

c++ - cppcheck 警告列表初始化中指向局部变量的指针

c++ - 如何在 std::map 类中定义迭代器

c++ - 禁用标准 :string's SSO

c++ - 从未收到发送到本地主机端口的数据包

c++ - 尝试在 fedora 25 上链接 SFML 应用程序

C++ 编译器错误 c4430 "c++ doesnt support default int"

c++ - 获取 NUMA 系统中的节点距离(跳数)