C++(二十八) — 构造函数的初始化列表

1、解决的问题:

  在 B 类中,组合了一个 A 类对象,其中A类设计了构造函数。由于构造函数的调用规则,设计了构造函数就必须调用,但在定义B类时没有机会初始化A,因此采用构造函数的初始化列表来解决。

 2、构造和析构调用顺序

  先执行被组合对象的构造函数,如果组合对象有多个,则按照定义顺序,而不是按照初始化列表顺序。

   析构函数,和构造函数的调用顺序相反。

  举例如下:

class A
{
public:
    A(int a_)
    {
        a = a_;
        cout << "A的构造函数,a: " << a << endl;
    }
    ~A()
    {
        cout << "A的析构函数 " << endl;
    }
private:
    int a;
};

class B
{
public:
    B(int b1_, int b2_) :a1(1), a2(2)
    {
        b1 = b1_;
        b2 = b2_;
    }
    B(int b1_, int b2_, int m, int n) :a1(m), a2(n)
    {
        b1 = b1_;
        b2 = b2_;
        cout << "B的构造函数" << endl;
    }
    ~B()
    {
        cout << "B的析构函数 " << endl;
    }
private:
    int b1, b2;
    //A类别构造函数的调用与定义顺序有关,与初始化列表顺序无关。
    A a1;
    A a2;
};

void display()
{
    B obj_b1(1, 2, 3, 4);
}

void main()
{
    //A a0(10);
    //B obj_b0(1, 2);
    //B obj_b1(1, 2, 3, 4);
    display();

    system("pause");
}

原文地址:https://www.cnblogs.com/eilearn/p/10194897.html

时间: 2024-08-03 01:03:25

C++(二十八) — 构造函数的初始化列表的相关文章

Bootstrap &lt;基础二十八&gt;列表组

列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 class .list-group-item. 下面的实例演示了这点: <!DOCTYPE html> <html> <head> <title>Bootstrap 实例 - 基本的列表组</title> <link href="/boo

企业搜索引擎开发之连接器connector(二十八)

通常一个SnapshotRepository仓库对象对应一个DocumentSnapshotRepositoryMonitor监视器对象,同时也对应一个快照存储器对象,它们的关联是通过监视器管理对象DocumentSnapshotRepositoryMonitorManagerImpl实现的 DocumentSnapshotRepositoryMonitorManagerImpl类要实现那些行为,先查看其实现接口DocumentSnapshotRepositoryMonitorManager定义

Welcome to Swift (苹果官方Swift文档初译与注解二十八)---199~208页(第四章-- 流程控制)

Value Bindings (绑定值) 在switch的case中可以绑定一个或者多个值给case体中的临时常量或者变量,这个成为绑定值. 代码样例: let anotherPoint = (2, 0) switch anotherPoint { case (let x, 0):   println("on the x-axis with an x value of \(x)") case (0, let y):   println("on the y-axis with

Cocos2d-x 3.x 图形学渲染系列二十八

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 昨天,刚从丈母娘家回来,继续博客的更新,接着Cocos2d-x 3.x图形学渲染系列二十七继续系列二十八的编写. 接下来读取FBX模型文件信息,首先要做的是把读取的模型信息进行归类并

QT开发(二十八)——QT常用类(二)

QT开发(二十八)--QT常用类(二) 一.QDir 1.QDir简介 QDir提供对目录结构及其内容的访问. QDir通过相对或绝对路径指向一个文件. 2.QDir成员函数 QDir主要成员函数如下: QDir::QDir ( const QDir & dir ) QDir::QDir ( const QString & path = QString() ) Dir::QDir ( const QString & path, const QString & nameFil

微软云计算介绍与实践(实践之二十八)

运行服务请求 上面章节小张发布服务给晓红时,预设的流程是首验证用户,然后与Orchestrator和SCVMM交互,最后确保按计划进行工作流.于是小张将创建一个测试私有云. 1.打开Service Manager门户网站浏览http://Sharepoint:82/SMPortal,从通用类选择基础设施服务 2.由于小张只创建和发布一个请求服务,在这里小张将在基础设施页面选择创建私有云 3.在如下发售请求页面,选择进入申请表 4.审查和提交页面,我们可以双击选择提交前检查我们的信息 5.确认页面

二十八个 HTML5 特性与技巧

1. New Doctype  你还在使用令人讨厌的难记的XHTML文档类型声明吗?<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>如果还在用,为什么呢?如同Douglas Quaid所说,转到新的HTML5这种文档类型吧,它会使你看起来更年轻.实际上,你当真知道XHTML的文档类型声明

纯干货!二十八道BATJ大厂Java岗之"多线程与并发"面试题分享

年底了,又到了跳槽季啦,该刷题走起了.这里总结了一些被问到可能会懵逼的面试真题,有需要的可以看下- 一.进程与线程 进程是资源分配的最小单位,线程是cpu调度的最小单位.线程也被称为轻量级进程. 所有与进程相关的资源,都被记录在PCB中 进程是抢占处理及的调度单位:线程属于某个进程,共享其资源 一个 Java 程序的运行是 main 线程和多个其他线程同时运行. 二.Thread中的start和run方法的区别 调用start()方法会创建一个新的子线程并启动 run()方法只是Thread的一

【Unity 3D】学习笔记二十八:unity工具类

unity为开发者提供了很多方便开发的工具,他们都是由系统封装的一些功能和方法.比如说:实现时间的time类,获取随机数的Random.Range( )方法等等. 时间类 time类,主要用来获取当前的系统时间. using UnityEngine; using System.Collections; public class Script_04_13 : MonoBehaviour { void OnGUI() { GUILayout.Label("当前游戏时间:" + Time.t