【带头学C++】----- 九、类和对象 ---- 9.5 初始化列表

目录

[9.5 初始化列表](#9.5 初始化列表)

[9.5.1 对象成员](#9.5.1 对象成员)

代码:

[9.5.2 初始化列表](#9.5.2 初始化列表)


9.5 初始化列表

9.5.1 对象成员

在类中定义的数据成员一般都是基本的数据类型。但是类中的成员也可以是对象,叫做对象成员。

先调用对象成员的构造函数,再调用本身的构造函数。析构函数和构造函数调用顺序相反,先构造,后析构。

类会自动调用对象成员的无参构造

下例中,B类中定义了A类的对象,ob就是B类中的对象成员,构造顺序是先构造成员对象的无参构造,再构造自身的无参构造函数。但是析构的时候则相反的,先析构自身的,再析构A类的析构函数。

代码:

cpp 复制代码
#include <iostream>
#include "string.h"
using namespace std;

class A{
public:
    int mA;
public:
    A(){
        cout<<"A类的无参构造"<<endl;
    }
    A(int num){
        cout<<"A类的有参构造 mA="<<mA<<endl;
    }
    ~A(){
        cout<<"A类的析构函数"<<endl;
    }
};
class B{
public:
    int mB;
    A ob;//对象成员
public:
    B(){
        cout<<"B类的无参构造"<<endl;
    }
    ~B(){
        cout<<"B类的析构函数"<<endl;
    }
};
void test05(){
    B ob1;
}
int main()
{
    test05();
    return 0;
}

9.5.2 初始化列表

类想调用对象成员有参构造,必须使用初始化列表

那么调用这个对象成员的有参构造函数去传递值,这时候就像下面这样写的一样。

那么怎么使用呢?下面这个写就可以调用成员对象的有参构造方法了。

对比下之前的写法:此时会调用无参构造,无法调用有参构造

代码:

cpp 复制代码
#include <iostream>
#include "string.h"
using namespace std;

class A{
public:
    int mA;
public:
    A(){
        cout<<"A类的无参构造"<<endl;
    }
    A(int num){
        mA = num;
        cout<<"A类的有参构造 mA="<<mA<<endl;
    }
    ~A(){
        cout<<"A类的析构函数"<<endl;
    }
};
class B{
public:
    int mB;
    A ob;//对象成员
public:
    B(){
        cout<<"B类的无参构造"<<endl;
    }
    //B类的有参构造
    B(int a,int b):ob(a)   //初始化列表
    {
        //ob.mA = a;
        mB = b;
        cout<<"B类的有参构造"<<endl;
    }
    ~B(){
        cout<<"B类的析构函数"<<endl;
    }
};
void test05(){
    B ob1(10,20);
}
int main()
{
    test05();
    return 0;
}

多个对象成员,使用初始化列表,调有参构造的时候,使用 "," 英文的逗号隔开

相关推荐
Mu.3871 分钟前
加密与安全
java·开发语言
源代码•宸11 分钟前
深入浅出设计模式——创建型模式之建造者模式 Builder
c++·经验分享·设计模式·建造者模式
_extraordinary_35 分钟前
Java 字符串常量池 +反射,枚举和lambda表达式
android·java·开发语言
roman_日积跬步-终至千里42 分钟前
【机器学习】两大线性分类算法:逻辑回归与线性判别分析:找到分界线的艺术
算法·机器学习·分类
YuTaoShao43 分钟前
【LeetCode 热题 100】739. 每日温度——(解法一)单调栈+从右到左
java·算法·leetcode·职场和发展
睿思达DBA_WGX1 小时前
Python 程序设计讲义(36):字符串的处理方法——去除字符串头尾字符:strip() 方法、lstrip() 方法与rstrip() 方法
开发语言·python
itgather1 小时前
智能图书馆管理系统开发实战系列(五):前后端集成 - koffi调用与接口设计
c++·koffi
Spider_Man1 小时前
栈中藏玄机:从温度到雨水,单调栈的逆袭之路
javascript·算法·leetcode
下页、再停留2 小时前
【PHP】CURL请求第三方API接口
开发语言·php
爱吃KFC的大肥羊2 小时前
C/C++常用字符串函数
c语言·数据结构·c++·算法