考虑以下计划:
#include <string>
#include <iostream>
class B {
private:
std::string s;
public:
B() { s = fun(); }
std::string fun() { return "hello"; }
void print() {
std::cout << s;
}
};
int main(){
B b;
b.print();
}
Run Code Online (Sandbox Code Playgroud)
输出是 Hello
我的问题是:
我怀疑的是我如何在b对象上调用一个尚未由构造函数创建的函数.
到目前为止,对象的构造函数体开始执行,所有对象的基础,直接或因此间接,以及成员已经被显式或隐式初始化.因此s,一个有效的字符串对象在法律上可以作为赋值的LHS.
这里应该注意的一件事是,如果从构造函数中调用多态类的虚方法,则选择此当前类型的实现,因为任何派生类型尚未初始化,因此其重载(如果有的话)将是非法的打电话.