C++笔记----构造函数与析构函数(三)

1、构造函数初始化列表

推荐在构造函数初始化列表中进行初始化

构造函数的执行分为两个阶段:初始化段、 普通计算段

2、对象成员及其初始化

 1 #include<iostream>
 2 using namespace std;
 3
 4 class Object
 5 {
 6 public:
 7     Object(int num) :num_(num)
 8     {
 9         cout << "Object..." <<num_<<"..."<< endl;
10     }
11     ~Object()
12     {
13         cout << "~Object..." << num_ << "..." << endl;
14     }
15 private:
16     int num_;
17 };
18 class Container
19 {
20 public:
21     Container(int obj1=0, int obj2=0):obj1_(obj1), obj2_(obj2)
22     {
23         cout << "Container..." << endl;
24     }
25     ~Container()
26     {
27         cout << "~Container..." << endl;
28     }
29 private:
30     Object obj1_;
31     Object obj2_;
32 };
33 int main(void)
34 {
35     Container c(10,20);//先构造Object,再是Container析构次序相反
36
37     return 0;
38 }

3、const成员、引用成员的初始化

const成员的初始化只能在初始化列表中进行

 1 #include<iostream>
 2 using namespace std;
 3
 4 //对象成员(对象所对应的类没有默认构造函数)的初始化,只能在构造函数初始化列表中进行
 5 class Object
 6 {
 7 public:
 8     Object(int num=0) :num_(num), kNum_(num), redNum_(num_)
 9     {
10         //kNum_=100;  ERROR
11         //redNum_ = num;  ERROR
12         cout << "Object..." << num_ << "..." << endl;
13     }
14     ~Object()
15     {
16         cout << "~Object..." << num_ << "..." << endl;
17     }
18 private:
19     int num_;
20     const int kNum_;  //const成员的初始化只能在构造函数初始化列表中进行
21     int& redNum_;     //引用成员的初始化只能在构造函数初始化列表中进行
22 };
23
24 int main(void)
25 {
26     Object obj(10);
27
28     return 0;
29 }

加入枚举类型

#include<iostream>
using namespace std;

class Object
{
public:
    enum E_TYPE
    {
        TYPE_A=100,
        TYPE_B=200
    };
public:
    Object(int num=0) :num_(num), kNum_(num), redNum_(num_)
    {
        cout << "Object..." << num_ << "..." << endl;
    }
    ~Object()
    {
        cout << "~Object..." << num_ << "..." << endl;
    }
    void DisplaykNum_()
    {
        cout << "kNum_" << kNum_ << endl;
    }
private:
    int num_;
    const int kNum_;
    int& redNum_;
};

int main(void)
{
    Object obj1(10);
    Object obj2(20);
    obj1.DisplaykNum_();
    obj2.DisplaykNum_();
    cout << obj1.TYPE_A << endl;
    cout << obj2.TYPE_A << endl;
    cout << Object::TYPE_A << endl;
    return 0;
}

时间: 2024-09-30 11:37:33

C++笔记----构造函数与析构函数(三)的相关文章

C++笔记----构造函数与析构函数(二)

构造函数是一种特殊的成员函数.在创建对象的时候自动调用,对对象的数据成员进行初始化. (1)栈区中创建的对象,在生存期结束的时候会自动调用析构函数. (2) 在堆上创建的对象,要由程序员显示调用delete释放该对象,同时调用析构造函数. (3)全局对象的构造先于main函数.全局对象在其生存期结束的时候也会自动调用析构造函数,对对象进行释放. 构造函数的作用:初始化.类型转化(转换构造函数) 1.转换构造函数 定义:转换构造函数是单个参数的构造函数 作用:将其他类型转换成类类型 类的构造函数只

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

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

C++ Primer 学习笔记_18_类与数据抽象(4)_构造函数、析构函数、explicit关键字、赋值与初始化、类成员的显式初始化

引言: 构造函数确保每个对象在创建时自动调用,以确保每个对象的数据成员都有合适的初始值. 一.构造函数.默认构造函数 1.构造函数 --构造函数是特殊的成员函数 --构造函数是为了保证对象的每个数据成员都被正确初始化 --函数名和类名完全相同 --不能定义构造函数的类型(返回类型),也不能使用void --通常情况下构造函数应声明为公有函数,一般被隐式地调用. --构造函数被声明为私有有特殊的用途,比如单例模式. (1).构造函数可以被重载 一般而言,不同的构造函数允许用户指定不同的方式来初始化

《C++ Primer Plus》10.3 类的构造函数和析构函数 学习笔记

10.3.1 声明和定义构造函数构造函数原型:// constructor prototype with some default argumentsStock(const string &co, long n = 0, double pr = 0.0);构造函数定义:// constructor definitionStock::Stock(const string & co, long n, double pr){    company = co;    if (n < 0)  

对C++中派生类的构造函数和析构函数的认识

一:构造函数 形式:派生类名::派生类名:基类名1(参数1),基类名2(参数2),--基类名n(参数n),数据成员1(参数1),数据成员2(参数2),--数据成员n(参数n){ 各种操作的说明 } 执行过程:先执行基类的构造函数,再进行数据成员的赋值,最后执行函数体. 其中基类名和数据成员的顺序是由在派生类的定义中声明的顺序决定执行的顺序的,因此它们的顺序是任意的,但为了可读性,还是最好按顺序写. 如果基类只有默认构造函数,则基类名和参数表可以不用写出来. 二:复制构造函数 派生类的构造函数的形

拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

 1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: #include<iostream> //如果声明已经定义,边不会生成 class classA { private: int a; int b; public: //拷贝构造的规则,有两种方式实现初始化 //1.一个是通过在后面:a(x),b(y)的方式实现初始化 //2.第二种初始化的方式是直

C++C++中构造函数与析构函数的调用顺序

http://blog.csdn.net/xw13106209/article/details/6899370 1.参考文献 参考1: C++继承中构造函数.析构函数调用顺序及虚函数的动态绑定 参考2: 构造函数.拷贝构造函数和析构函数的的调用时刻及调用顺序 参考3: C++构造函数与析构函数的调用顺序 2.构造函数.析构函数与拷贝构造函数介绍 2.1构造函数 构造函数不能有返回值 缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都初始化为零或空 创建一个对象

C++学习之类的构造函数、析构函数

在C++的类中,都会有一个或多个构造函数.一个析构函数.一个赋值运算操作符.即使我们自己定义的类中,没有显示定义它们,编译器也会声明一个默认构造函数.一个析构函数和一个赋值运算操作符.例如: 1 //声明一个空类 2 class Empty{}; 3 4 //但是这个空类和下面这个类是等同的 5 class Empty 6 { 7 Empty(){.....}; //默认构造函数 8 Empty( const Empty & rhs ){......} //复制构造函数 9 ~Empty(){.

c++中的构造函数和析构函数

构造函数:  C++提供了构造函数(constructor)来处理对象的初始化.在建立对象时自动执行.构造函数的名字必须与类名同名,它不具有任何类型,不返回任何值. 构造函数总结: ①构造函数是C++中用于初始化对象状态的特殊函数. ② 构造函数在对象创建时自动被调用(默认调用),隐身调用. ③构造函数和普通成员函数都遵循重载规则. ④拷贝构造函数是对象正确初始化的重要保证,必要的时候,必须手工编写拷贝构造函数. 构造函数的调用: 自动调用:一般情况下C++编译器会自动调用构造函数 手动调用:在