组合类的构造函数的调用顺序

文章来源:https://bbs.csdn.net/topics/390253882

“构造函数调用顺序:先调用内嵌对象的构造函数(按内嵌时的声明顺序,先声明者先构造)。然后调用本类的构造函数。(析构函数的调用顺序相反)”

#include<iostream>
using namespace std;
class Part //部件类
{
public:
    Part() {cout<<"Part default construction called"<<endl;}
    Part(int i) {cout<<"Part: "<<i<<" construction called"<<endl;}
    ~Part() {cout<<"Part deconstruction called"<<endl;}
private:
    int val;
};

class Whole
{
public:
    Whole();
    Whole(int i,int j,int k);
    ~Whole();
private:
        //这三个变量的声明顺序改变,打印输出的结果仍然一样
    Part one;
    Part two;
    int  date;
};

Whole::Whole()
{    date=0;}
Whole::Whole(int i,int j,int k)
:one(j),date(k),two(i)    //这里的初始化顺序按照one(2),date(3),two(1)进行,按照i,j,k的顺序来的.
:/*one(j),*/date(k), two(i)   //默认构造one
{ cout<<"Whole‘s construction called!"<<endl; }

Whole::~Whole()
{
    cout<<"Whole deconstruction called!"<<endl;
}
int main(void)
{
    Whole w(1, 2, 3);
    return 1;
}

输出结果:

Part: 2 construction called
Part: 1 construction called
Whole‘s construction called!

Whole deconstruction called!
Part deconstruction called
Part deconstruction called

“构造函数调用顺序:先调用内嵌对象的构造函数(按内嵌时的声明顺序,先声明者先构造,比如上面的按照i,j,k)。然后调用本类的构造函数。(析构函数的调用顺序相反)”

原文地址:https://www.cnblogs.com/Stephen-Qin/p/11512427.html

时间: 2024-10-13 17:17:35

组合类的构造函数的调用顺序的相关文章

C++聚合关系类的构造函数的调用顺序

如图,表示一个聚合关系 下面就用简单的代码来实现 1 #pragma once 2 class Engine 3 { 4 public: 5 Engine(); 6 ~Engine(); 7 }; Engine.h 1 #include <iostream> 2 #include "Engine.h" 3 using namespace std; 4 5 Engine::Engine() 6 { 7 cout << "调用构造函数:Engine()&q

c++类中构造函数的调用

在c++类中构造函数一般会在类的对象被创建时调用,总结起来有3中情况: 第一种: MyClass class;//在栈中产生一个对象 第二种: MyClass* class = new MyClass();//在堆中产生一个对象 第三种: static MyClass class;//在函数活动范围之外产生的一个对象 第一种和第二种在配置内存(来自堆或栈)之后立刻产生一个隐藏的构造函数的调用,而第三种情况必须由startup来启用(startup是mian函数调用前被调用的,有c++编译器提供,

C++继承中析构函数 构造函数的调用顺序以及虚析构函数

首先说说构造函数.大家都知道构造函数里就能够调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就能够调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数,仅仅有这样子类才干在构造函数里使用基类的成员,所以是创建子类时先调用基类的构造函数然后再调用自己的构造函数.通俗点说,你要用某些物品.但这些物品你没办法自己生产,自然就要等别人生产出来,你才干拿来用. 接着就是析构函数了,上面说到子类是将基类的成员变成自己的成员,那么基类就会仅仅存在子类中直到子类调

C++多重继承,菱形继承中构造函数的调用顺序

C++中多重继承不免会出现钻石继承,也就是继承类的两个基类同时又是同一个基类的继承类,当创建一个对象的时候,他们是按照什么样的顺序调用构造函数的呢. 如果不进行虚拟继承: class Base { public: Base() { cout<<"Base默认构造函数调用"<<endl; } Base(int i) { cout<<"Base参数构造函数调用"<<endl; cout<<i<<en

基础学习day06---面向对象二---static,类的初始化和调用顺序、单例模式

一.static关键字 1.1.static关键字 静态:static用法:是一个修饰符,用于修饰成员(成员变量,成员函数)static 修饰的内容,所有对象共享当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以被类名.静态成员 package com.day06; /** * 人类 * @author Administrator *静态:static *用法:是一个修饰符,用于修饰成员(成员变量,成员函数) *static 修饰的内容,所有对象共享 *当成员被静态修饰后,就多

继承构造函数的调用顺序

子类构造方法在调用时必须先调用父类的,由于父类没有无参构造,必须在子类中显式调用,修改子类构造方法如下即可: public Derived(String s){         super("s");         System.out.print("D");     } 在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没

c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)

现在来测试一下在多重继承,虚继承,MI继承中虚继承中构造函数的调用情况. 先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; }

c++学习笔记4,派生类的构造函数与析构函数的调用顺序(一)

測试源代码: //測试派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; } ~base() { cout<<"base destroyed!"<<endl; } };

C++:派生类的构造函数和析构函数的调用顺序

一.派生类 在C++编程中,我们在编写一个基类的派生类时,大致可以分为四步: ? 吸收基类的成员:不论是数据成员还是函数成员,派生类吸收除基类的构造函数和析构函数之外的全部成员. ? 改造基类函数:在派生类中声明一个或多个与其(某个)基类中的成员函数同名的成员函数,并将它(们)根据新的需求进行重写 ? 发展新的成员:在派生类中添加新的成员变量和成员函数,其中新添加的成员要求必须和基类中的成员不同名,并且应当保证新添加的成员会使派生类在功能上相比其基类有所发展 ? 重写派生类的构造函数和析构函数