C++ 如何在构造函数中调用构造函数?

C++ 如何在类的构造函数中调用已经写好的构造函数

让我们先看一段代码:

#include<iostream>
using namespace std;
int main()
{
    int a = 12;
    cout << a << endl;
    int* p = new (&a) int(15);
    cout << *p << endl;
}

你可能会感慨,为什么要做这种抠脚操作?
确实,这种做法是很无聊的,但是我们也发现这样做有一个特点:我们可以在已有的已经申请的内存上调用构造函数对其进行初始化。
那就算能这么做又有什么意义呢?

假设我们有一个写好的构造函数A(int,int),我们现在想要重载一个构造函数A(int,int,int),但是新的构造函数除了部分操作外,其他基本和原来写好的构造函数一致,这就出现了极大的代码重复。代码重复是令我们恶心的一点,但是我们又不能直接在新写的构造函数中调原构造函数。之前那个抠脚的操作就起到作用了。

#include <iostream>
using namespace std;
class A
{
  private:
      int a;
  public:
      A(int);
      A(int,int);
};
A::A(int _a)
:a(_a)
{
    cout << "调用旧的构造函数"  << endl;
}
A::A(int _a,int)
{
    new(this) A(_a);
    cout << "调用新的构造函数"  << endl;
    cout << a << endl;
}
int main()
{
    A a(12,12);
    //我们发现即调用了新的构造函数又调用了旧的构造函数
    //因为我们在新的构造函数中调用了旧的构造函数
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值