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

时间:2018-04-21 12:57:10

标签: c++ oop language-concepts

我不明白什么是与函数参数相关的基本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;
}

1 个答案:

答案 0 :(得分:3)

对象生存期

如果在B的构造函数内创建A对象,则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();
    }
};