C++ OOP 基本概念 - 将参数传递给构造函数
C++ OOP Basic Concept - Passing parameters to constructors
我不明白什么是与函数参数相关的基本 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:
class A{
private:
B b;
public :
A(string const& n) : b(n) {}
void show(){
this->b.showName();
}
};
我不明白什么是与函数参数相关的基本 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:
class A{
private:
B b;
public :
A(string const& n) : b(n) {}
void show(){
this->b.showName();
}
};