C++ OOP 基本概念 - 将参数传递给构造函数



我不明白与函数参数相关的基本C++概念是什么。如果有人能确定我缺少的概念是什么,那真的会对我有所帮助 - 我想研究它以深入了解正在发生的事情。

考虑涉及两个类 A 和 B 的简单代码段。创建类型 A 的对象会导致创建与其关联的类型 B 的对象。不幸的是,我在传递创建 B 的参数值时做错了。

以下代码的输出为:

B name: name_value
B name: name_vaHy�

而不是

B name: name_value
B name: name_value

对象 B 的名称在构造函数调用后被修改...

#include <string>
#include <iostream>
using namespace std;
class B{
private:
    string name;
public:
    B(string const& n) : name(n){
        showName();
    }
    void showName(){
        cout << "B name: "  << name << endl;
    }
};
class A{
private:
    B* b;
public :
    A(string const& n)  {
        B b_ = B(n);
        this->b = &b_;
    }
    void show(){
        this->b->showName();
    }
};

int main() {
    string input = "name_value";
    A a = A(input);
    a.show();
    return 0;
}

对象生存期

如果在 A 的构造函数中创建一个 B 对象,则该B对象的生存期是 A 的构造函数。它在构造函数的末尾被销毁。在构造函数结束后使用指向它的指针是未定义的行为。

B对象仅在行A a = A(input);期间有效当您运行该行a.show(); B对象已被销毁。

你可以像这样编写 A 类:

class A{
private:
    B b;
public :
    A(string const& n) : b(n) {}
    void show(){
        this->b.showName();
    }
};

最新更新