ProDeveloperTutorial.com

教程和编程解决方案
菜单
  • Shell脚本
  • 系统设计
  • Linux系统编程
  • 4g LTE
  • 编码问题
  • C
  • C ++
  • DSA
  • GIT

C ++ 11功能:委托构造函数

前开发者教程 2020年2月26日

委托构造函数是C ++ 11中的新概念。

为什么我们需要委派构造函数?

1.委托构造函数用于防止代码重复。

2.这是委派初始化列表的唯一方法

考虑下面的代码:

#include <iostream>
//for more C ++ tutorial visit www.ProDeveloperTutorial.com

using namespace std;

class MyClass 
{ 
    int a;
    int b; 
    int c;
    
public:
    MyClass()
    {
        a = 0;
        b = 0;
        c = 0;
    }
    
    MyClass(int c)
    {
        a = 0;
        b = 0;
        这个->c = c;
    }
}; 
  

int main() 
{ 
    MyClass obj;
} 

如果看到默认的构造函数和参数化的构造函数。我们正在执行smae任务“a = 0; b = 0;”。但是我们只是在改变“this->c = c;”。我们正在执行代码重复数据删除。

您可以做的一件事是,可以创建一个公共函数init(),然后可以从两个构造函数中调用它,如下所示:

#include <iostream>
//for more C ++ tutorial visit www.ProDeveloperTutorial.com

using namespace std;

class MyClass 
{ 
    int a;
    int b; 
    int c;
    
public:
    void init()
    {
        a = 0;
        b = 0;
        c = 0;
    }
    
    MyClass()
    {
        init();
    }    
    
    MyClass(int c)
    {
        init();
        这个->c = c;
    }
}; 
  

int main() 
{ 
    MyClass obj;
} 

但是使用C ++ 11将提供更优雅的解决方案。您可以使用构造函数委托。

#include <iostream>
//for more C ++ tutorial visit www.ProDeveloperTutorial.com

using namespace std;

class MyClass 
{ 
    int a;
    int b; 
    int c;
    
public:
    MyClass()
    {
        a = 0;
        b = 0;
        c = 0;
    }
    
    // Constructor delegation  
    MyClass(int c): MyClass()
    {
        这个->c = c;
    }
}; 
  

int main() 
{ 
    MyClass obj;
} 

该网站上可用的教程列表:

C编程20+章C ++编程80+章
100多个编码问题数据结构和算法85+章
系统设计20+章Shell脚本编写12章
4g LTE 60+章节最常见的编码问题
5G NR 50+章Linux系统编程20+章
分享
电子邮件
鸣叫
领英
Reddit
绊倒
Pinterest的
上一篇文章
下一篇

关于作者

前开发者教程

每天我们都会讨论竞争性编程问题,请加入我们的网站:   电报频道

ProDeveloperTutorial.com

教程和编程解决方案
版权© 2020 ProDeveloperTutorial.com
从以下课程获得热门课程: 教育性的
<q id="q7MRtw1"></q>


<ol id="hIigJFo" class="hQbcJ35"></ol>
      <textarea id="ZVokizP"><q class="c7Fk8eb"><em id="a4G27rg"><video id="de4ZS3t" class="dcvJmi1"></video></em></q></textarea>