精华内容
下载资源
问答
  • 关于对象成员构造函数自身构造函数的执行顺序的问题,我们通过一段简单的程序来验证,测试代码如下: #include <stdio.h> class A { public: A() { printf("AAAAA\n"); }; ~A(){}; ...

    关于类中对象成员的构造函数和类自身构造函数的执行顺序的问题,我们通过一段简单的程序来验证,测试代码如下:

    #include <stdio.h>
    
    class A
    {
    	public:
    		A()
    		{
    			printf("AAAAA\n"); 
    		};
    		~A(){};
    };
    
    class B
    {
    	public:
    		B()
    		{
    			printf("BBBBB\n"); 
    		};
    		~B(){};
    };
    
    class C
    {
    	public:
    		C()
    		{
    			printf("CCCCC\n"); 
    		};
    		~C(){};
    	private:
    		A m_a;
    		B m_b;
    };
    
    
    int main()
    {
    	C m_c;
    	return 0;
    } 

    执行结果如下:

     

    结论:优先执行各个成员对象的构造函数(按照声明的顺序依次执行),其次才是类自身的构造函数。

     

    展开全文
  • C++对象成员构造函数

    千次阅读 2018-03-19 20:47:35
    当一个中出现对象成员时,该构造函数就要为对象成员初始化,对象成员的初始化必须在构造函数的初始化表中完成。注意:初始化对象成员时必须用对象成员名,而不是它的类型名。例如:class Date{ int year, ...

    一个类的对象可以作为另一个类的数据成员,此时把该对象称为类的对象成员。

    当一个类中出现对象成员时,该类的构造函数就要为对象成员初始化,对象成员的初始化必须在构造函数的初始化表中完成。

    注意:

    初始化对象成员时必须用对象成员名,而不是它的类型名。例如:

    class Date

    {

        int year, month, day;

        Date(int y, int m, int d)

        {

            year = y;

            month = m;

            day = d;

        }

    };

    class Person

    {

        char name[12];

        char sex[4];

        Date birthday;

    public:

        Person(char*, char*, int, int, int);

        ……

    };

    Person:Person(char *n, char *s, int y, int m, int d):birthday(y, m ,d)

    {

        strcpy(name, n);

        strcpy(sex, s);

    }

    此处使用birthday(y, m, d),不能使用Date(y, m, d)。

    若一个类包含对象成员,在建立该类的对象时,先调用对象成员的构造函数,初始化相应的对象成员,然后才执行该类的构造函数。

    如果一个类包含多个对象成员,对象成员的构造函数的调用顺序由它们在该类中的说明顺序决定,而它们在初始化表中的顺序无关。



    展开全文
  • 构造函数包含成员对象的初始化,如果构造函数成员初始化列表没有包含成员对象的初始化,系统会自动调用成员对象的无参构造函数。顺序上:先调用成员对象构造函数,当所有的成员对象都执行了自身的...

    参考博客:传送门1

    当类中含有对象成员时:

    • 类的构造函数要包含对成员对象的初始化,如果构造函数的成员初始化列表没有包含对成员对象的初始化,系统会自动调用成员对象的无参构造函数。顺序上:先调用成员对象的构造函数,当所有的成员对象都执行了自身类的构造函数以后再执行当前类的构造函数
    • 调用析构函数时先调用类的构造函数,再调用成员对象的构造函数。

    当类继承于另一个类时:

    • 如果没有显式地在构造函数的成员初始化列表中调用基类的构造函数,会自动先调用基类的无参构造函数。
    • 析构的时候先调用派生类的析构函数,再调用基类的构造函数。

    当类中含有成员对象,同时继承了某个类的时候,他们的构造函数析构函数的顺序是固定的(与成员初始化列表中的顺序没有关系):

    构造函数:基类->成员对象->派生类
    析构函数:派生类->成员对象->基类

    例如:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    class A
    {
    public:
    	A()
    	{
    		cout << "A" << endl;
    	}
    	~A()
    	{
    		cout << "~A" << endl;
    	}
    };
    
    class C
    {
    public:
    	C()
    	{
    		cout << "C" << endl;
    	}
    	~C()
    	{
    		cout << "~C" << endl;
    	}
    };
    
    class B:public A
    {
    	C c;
    public:
    	B()
    	{
    		cout << "B" << endl;
    	}
    	~B()
    	{
    		cout << "~B" << endl;
    	}
    };
    
    int main()
    {
    	B b;
    }
    

    运行结果:

    在这里插入图片描述

    展开全文
  • 派生类构造函数的任务应该包括3个部分: 对基类数据成员初始化; 对子对象数据成员初始化; 对派生数据成员初始化。 程序中派生类构造函数首部如下:  Student1(int n, string nam,int n1, string nam1,int a,...

    派生类构造函数的任务应该包括3个部分:

    • 对基类数据成员初始化;
    • 对子对象数据成员初始化;
    • 对派生类数据成员初始化。


    程序中派生类构造函数首部如下:
        Student1(int n, string nam,int n1, string nam1,int a, string ad):
            Student(n,nam),monitor(n1,nam1)
    在上面的构造函数中有6个形参,前两个作为基类构造函数的参数,第3、第4个作为子对象构造函数的参数,第5、第6个是用作派生类数据成员初始化的。

    归纳起来,定义派生类构造函数的一般形式为:

    //注意:基类写的是构造函数名即类名,而子对象写的是子对象的名不是子对象类的名字


        派生类构造函数名(总参数表列): 基类构造函数名(参数表列), 子对象名(参数表列)
        {
            派生类中新增数成员据成员初始化语句
        }

    执行派生类构造函数的顺序是:

    1. 调用基类构造函数,对基类数据成员初始化;
    2. 调用子对象构造函数,对子对象数据成员初始化;
    3. 再执行派生类构造函数本身,对派生类数据成员初始化。
    展开全文
  • // 例4.8 含有对象成员的派生类构造函数和析构函数的执行顺序。 #include&lt;iostream&gt; using namespace std; class Base{ //声明基类Base public: Base(int i){ //基类的构造函数 x = i; cout&...
  • A 基类构造函数,派生类对象成员构造函数,派生本身的构造函数 B 派生本身的构造函数,基类构造函数,对象成员构造函数 C 基类构造函数,派生本身的构造函数,派生类对象成员构造函数 D 对象成员构造...
  • 习题答案请参考:C++ Primer 第五版 第7章 7.1——讲解(成员函数、非成员函数、构造函数)习题答案 目录 7.1 讲解(成员函数、非成员函数、构造函数成员函数 this const成员函数 (常量成员函数) ...
  • 在调用构造函数时先调用基类的构造函数,在调用对象成员构造函数,最后在调用派生本省的构造函数。 例: 在这里插入代码片 #include <iostream > using namespace std; class B1 { public: B1() { ...
  • 的特殊成员函数——构造函数

    千次阅读 2016-05-26 20:27:25
    每个都定义了其对象被初始化的方式,通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数统称做构造函数。  构造函数的任务就是初始化的数据成员,只要有对象被创建,就会执行构造函数。 ...
  • (2)当一个中含有对象成员时,在启动本构造函数之前,先分配对象空间,按对象成员的声明顺序执行他们各自的构造函数,再继续执行本构造函数; (3)对于非静态的局部对象,他们的析构函数的执行顺序与...
  • C#类成员-构造函数

    千次阅读 2009-09-28 14:42:00
    如果您没有为提供构造函数,在创建对象时则由 C# 默认创建一个构造函数,该构造函数实例化对象,并将成员变量设置为默认值表(C# 参考)中列出的默认值。静态和结构也可以有构造函数。一、使用构造函数构造函数...
  • 1、成员函数包括构造函数,析构函数,拷贝构造函数,赋值操作符重载,取地址操作符重载,const操作符修饰的操作符重载 2、友元函数不属于成员函数  ...
  • 包含对象的派生构造函数 分类: C++2012-11-28 11:22 52人阅读 评论(0) 收藏 举报 派生类构造函数的任务包括3部分: 1--对基类数据成员初始化; 2--对子对象数据成员初始化; 3--对派生...
  • I . 主构造函数 II . 主构造函数声明属性 III ....IV . 主构造函数参数 和 成员变量访问方式 V . 主构造函数 可见性 设置 VI . 次构造函数 ( 常用情况 ) ... 调用 主构造函数 / 次构造函数 创建实例对象
  • 【C++】C++对象构造函数和析构函数

    千次阅读 多人点赞 2018-06-03 20:32:37
    它即可包含描述事物的数据,又可包含处理这些数据的函数在程序运行时是被用作样板来建立对象的。所以要建立对象,首先必须定义。 定义 定义一个的一般格式为: class 类名{ private: 成员表1; public:...
  • 完成构造函数的重载,使用不同的构造函数创建不同的对象。 完成拷贝构造函数的定义 string 类型的数据成员 /*数据成员是string类型的拷贝构造函数的实现*/ #include<iostream> #include<string> ...
  • 成员函数 构造函数

    千次阅读 2013-03-09 09:36:06
    如果对同一个定义了10个对象,这些对象成员函数对应的是同一个函数代码段,而不是10个不同的函数代码段。 需要注意的是: 虽然调用不同对象成员函数时都是执行同一段函数代码,但是执行结果一般是不相同的。...
  • 一个对象作为另一个的数据成员。 &nbsp; &nbsp; &nbsp; &nbsp;一个中的数据成员除了可以是int, char, float等这些基本的数据类型外,还可以是某一个的一个对象。用子对象创建新。 &...
  • 实例构造函数实例构造函数是一个特殊的方法,它在创建的每个新实例化时执行。●构造函数用于初始化实例状态。●如果希望能从的外部创建的实例,需要将构造函数声明为public。●构造函数的名称和类名相同。●...
  • 派生类构造函数成员初始化列表 A. 基类的构造函数 B. 派生类对象的初始化 D.派生中一般数据成员的初始化 不行 C. 基类子对象的初始化 #include<iostream> using namespace std; class X { private: int...
  • 拷贝构造函数(对象初始化对象的过程)4.1 前言4.2 什么是拷贝构造函数4.3 拷贝构造函数的特性4.4 拷贝构造函数参数中的const是否可以去掉4.5 拷贝构造函数参数中&是否可以去掉5. 1. 的6个默认成员函数 如果一...
  • C++中建立派生类对象构造函数的调用顺序 建立派生类对象时,派生类构造函数的调用顺序如下: 执行基类的构造函数。当派生有多个基类时,处于同一层次的各个基类的构造函数的调用顺序取决于定义派生时...
  • c++的静态成员构造函数

    千次阅读 2017-03-31 15:17:26
    静态成员是处理同一个的不同对象之间数据和函数共享问题的。 1.静态数据成员 我们所说的“一个的所有对象具有相同的属性”是指实例属性,以非静态数据成员表示,如Employee中的empNo.id.它们在的每一个对象...
  • class A { public: ...以上两种方式是等价的,第一种使得类型可以向内置类型一样简单的被使用,第二种显示调用构造函数 值得注意都是, A a; 这种方式不一定调用的是默认构造函数 class A { public:
  • 对象数组实例(栈中实例化和堆中实例化):class Coordinate { public: int m_iX; int m_iY; };int main() { Coordinate coord[3];//栈中实例化 coord[1].m_iX = 10; Coordinate *p = new Coordinate[3];//堆中...
  • 1.题目要求:定义一个Student包含名字一个数据成员,定义无参构造函数、有参构造函数、拷贝构造函数、析构函数及对于名字的封装函数,在main函数中实例化Student对象,并访问相关函数,观察运行结果。...
  • 一、对象 面向对象思想把现实世界中的物体都封装成对象,而是所有相同类型对象的抽象,是他们的总体描述。同一个的不同对象有相同的属性和行为,所以在... // 公有成员,通常用来定义的行为,提供接口供外
  • 派生类构造函数

    2017-03-30 18:35:22
    2、 派生的合成默认构造函数除了初始化派生的数据成员之外,它还初始化派生类对象的基类部分。基类部分由基类的默认构造函数初始化。 3、 派生类构造函数的初始化列表只能初始化派生成员,不能直接初始化...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 295,090
精华内容 118,036
关键字:

包含对象成员的类的构造函数