Can I call a constructor from another constructor (do constructor chaining) in C++?(我可以从 C++ 中的另一个构造函数(做构造函数链接)调用构造函数吗?)
问题描述
作为 C# 开发人员,我习惯于通过构造函数运行:
As a C# developer I'm used to running through constructors:
class Test {
public Test() {
DoSomething();
}
public Test(int count) : this() {
DoSomethingWithCount(count);
}
public Test(int count, string name) : this(count) {
DoSomethingWithName(name);
}
}
有没有办法在 C++ 中做到这一点?
Is there a way to do this in C++?
我尝试调用类名并使用this"关键字,但都失败了.
I tried calling the Class name and using the 'this' keyword, but both fail.
推荐答案
C++11:是的!
C++11 及更高版本具有相同的功能(称为 委托构造函数).
C++11 and onwards has this same feature (called delegating constructors).
语法与C#略有不同:
class Foo {
public:
Foo(char x, int y) {}
Foo(int y) : Foo('a', y) {}
};
C++03:否
不幸的是,在 C++03 中没有办法做到这一点,但是有两种方法可以模拟这个:
Unfortunately, there's no way to do this in C++03, but there are two ways of simulating this:
您可以通过默认参数组合两个(或多个)构造函数:
You can combine two (or more) constructors via default parameters:
class Foo {
public:
Foo(char x, int y=0); // combines two constructors (char) and (char, int)
// ...
};
使用init方法共享通用代码:
Use an init method to share common code:
class Foo {
public:
Foo(char x);
Foo(char x, int y);
// ...
private:
void init(char x, int y);
};
Foo::Foo(char x)
{
init(x, int(x) + 7);
// ...
}
Foo::Foo(char x, int y)
{
init(x, y);
// ...
}
void Foo::init(char x, int y)
{
// ...
}
请参阅C++FAQ 条目以供参考.
这篇关于我可以从 C++ 中的另一个构造函数(做构造函数链接)调用构造函数吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:我可以从 C++ 中的另一个构造函数(做构造函数链接)调用构造函数吗?


基础教程推荐
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 常量变量在标题中不起作用 2021-01-01
- 这个宏可以转换成函数吗? 2022-01-01
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 我有静态或动态 boost 库吗? 2021-01-01
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- C++结构和函数声明。为什么它不能编译? 2022-11-07