我有以下代码:
class Base
{
public:
Base(int test) { std::cout << "Base constructor, test: " << test << std::endl; }
};
class Derived : public Base
{
private:
int variable;
public:
Derived() :
variable(50),
Base(variable)
{}
};
Derived derived;
我希望输出是:“base constructor,test:50”,但事实并非如此,因为base
构造函数是在variable
初始化之前调用的,没有错误或警告,它只是编译。
有什么方法可以让base
构造函数在之后被调用吗?或者这是总体上的糟糕设计?
我正在尝试将所有的init方法和它们的调用放入构造函数insted中,这个行为阻止了我这样做。
有什么办法可以让基构造函数在之后被调用吗?
不。对象的构造函数必须先构造其基函数。
我试图通过将它们放入构造函数中来摆脱所有的init方法和它们的调用
那是值得的努力!
我假设您真正的代码变量
比int
更复杂。因为如果它是一个int,您可以简单地调用base(50)
。
可以使用延迟构造函数在任何构造函数开始之前准备变量。
class Derived : public Base
{
public:
// Generate an important value FIRST, and then delegate
// construction to a new constructor.
Derived() : Derived( GenerateSomethingComplex() ) {}
private:
// Here, we can honor constructing Base before Derived
// while "some value" has been procured in advance.
Derived( SomethingComplex&& var) :
Base(var),
variable( std::move(var) )
{}
SomethingComplex variable;
};
我相信现代C初始值设定项列表对于初始化对象非常有用,甚至不需要定义自己的构造函数: 但是,当我的类从另一个类继承时,这不起作用: 我尝试添加
所以我正在学习构造函数初始值设定项列表,我写了以下代码: 为此我使用了g编译器。它调用的是构造函数而不是复制构造函数。它应该调用复制构造函数,因为我正在创建一个对象来创建另一个对象?这里的问题是什么,标准对此怎么说?
主要内容:初始化 const 成员变量构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用 初始化列表。 C++构造函数的初始化列表使得代码更加简洁,请看下面的例子: 运行结果: 小明的年龄是15,成绩是92.5 李华的年龄是16,成绩是96 如本例所示,定义构造函数时并没有在函数体中对成员变量一一赋值,其函数体为空(当然也可以有其他语句),而是在函数首部与函数体之间添
我有一个这样的类,除了有多个成员: 我基本上希望对其进行聚合初始化,如下所示: 但由于自定义构造函数的原因,这似乎是不可能的,因此我想使用构造函数参数来模拟它: 这看起来有很多冗余,只是为了在可能的情况下移动和复制,尤其是在成员数量激增的情况下。我想我想要完美的转发? 但是现在我不能像这样使用空的初始化列表调用它: 因为无法推导出初始化列表参数类型。有没有不需要我写的解决方案 ?
由于某些原因,即使使用成员初始值设定项,我也会遇到无默认构造函数错误。我做错了什么? 一个最小的例子, a、 cpp a、 h b.cpp b、 h
本文向大家介绍C++构造函数初始化顺序详解,包括了C++构造函数初始化顺序详解的使用技巧和注意事项,需要的朋友参考一下 1.构造函数、析构函数与拷贝构造函数介绍 构造函数 1.构造函数不能有返回值 2.缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都初始化为零或空 3.创建一个对象时,系统自动调用构造函数 析构函数 1.析构函数没有参数,也没有返回值。不能重载