声明后调用构造函数
Call constructor after declaration
这可能是一个非常基本的问题。如何在变量声明后调用构造函数?例如,这是一个工作代码:
// in header
class Bar
{
SomeClass *foo;
public:
Bar();
}
// in .cpp
Bar::Bar()
{
foo = new SomeClass(1, 2, 3);
}
但是,如何更改foo
,使其不是指针呢?
谢谢!
如果您的foo
是在类内定义的,则使用构造函数初始值设定项列表,如下所示:
class X {
X() : foo(1,2,3) {}
SomeClass foo;
};
如果您需要计算foo
构造函数的参数,那么这将变得更加困难。你可以添加函数来计算你的值,例如:
class X {
X() : foo(initX(),initY(),initZ()) {}
SomeClass foo;
static int initX() { return 1;}
static int initY() { return 2;}
static int initZ() { return 3;}
};
但这并不总是可能的,也就是说,这取决于你如何计算自己的价值。(静态是有意的,因为您最好不要使用未完全构造的类成员)。
您也可以将这些值作为构造函数参数传递。
如果在类外声明它,它将是一个全局变量。要在.cpp文件中构造它,您可能应该在头中声明它为extern,然后在cpp-中声明它时使用所需的构造函数
SomeModule.h:
extern SomeClass foo;
SomeModule.cpp:
SomeClass foo(1, 2, 3);
如果它是一个类的成员变量,那么你可以通过显式初始化构造函数的成员初始化列表中的变量来使用你想要的构造函数
其他类别h:
class OtherClass
{
SomeClass foo;
public:
OtherClass();
}
其他类别.cpp:
OtherClass::OtherClass() : foo(1, 2, 3) {};
如果想要像指针大小写一样在代码的中间初始化,那么你可以让它用默认的构造函数初始化,并用你想要的值复制到与你想要的指针相同的位置,这样
foo = SomeClass(1, 2, 3);
更换
class Bar
{
SomeClass *foo;
public:
Bar();
};
Bar::Bar()
{
foo = new SomeClass(1, 2, 3);
}
…带有
class Bar
{
private:
SomeClass foo;
public:
Bar();
};
Bar::Bar()
: foo{ 1, 2, 3 }
{}
相关文章:
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 确保所有构造函数调用相同的函数 c++ 设计模式
- 减少复制构造函数调用
- 使用回调函数从构造函数调用虚拟/派生方法的替代方法?
- 在 Google 测试中,我可以从构造函数调用 GetParam() 吗?
- C++ - 从另一个类构造函数调用类构造函数
- 在C++中初始化带有和不使用构造函数调用的对象有什么区别
- 是否可以从移动构造函数调用默认构造函数?
- 在模板生成器模式中分解重复的构造函数调用
- std::atexit 从全局对象的构造函数调用时的排序
- 对构造函数调用的约束
- 编译器错过了无效的构造函数调用,并调用不存在的(或私有的)默认构造函数
- 用构造函数调用填充向量
- 创建指针时是否没有构造函数调用
- 使用 emplace_back 避免移动构造函数调用的最佳方法?
- C++ 抽象类构造函数调用
- 为什么函数参数将带有参数的构造函数调用
- 为什么比“构造函数”调用更多的“解构器”调用
- 将对象传递给函数并不是导致构造函数调用