c语言入门到c++使用高手:深入学习C++之类 (四)

第三章 类

第四节 类内初始化,默认构造函数, =default

1. 类相关非成员函数

  • 可以将函数声明放在对应类的头文件中,但是不放在类中,函数实现放在对应类的源文件中
//在Time.h中添加
//普通函数声明
void WriteTime(Time &mytime);

//在Time.cpp中添加函数定义
//普通函数,不是类的成员函数
void WriteTime(Time &mytime){
    std::cout << mytime.Hour << std::endl;
}

// main.cpp的函数实现为
#include <iostream>
#include "Time.h"

using namespace std;

int main() {
    Time mytime{12, 34,3};
    WriteTime(mytime);
    return 0;
}

2. 类内初始化

  • 在c++11中,我们可以为类内的成员变量提供一个初始值,我们在创建对象的时候,这个初始值就用来初始化该成员变量
    // 创建对象的时候就进行初始化,如果构造函数中对Second有赋值,将会覆盖原始的0
    int Second = 0;

3. const成员变量的初始化

  • 在构造函数的初始化列表中进行,不可以通过赋值初始化,或者直接在定义const的成员变量的时候进行初始化
    // 定义了一个成员常量
    const int ctestvalue=90;

4. 默认构造函数

  • 没有参数的构造函数,我们就称为默认构造函数

  • Time.h

#ifndef LESSION_PART_TWO_TIME_H
#define LESSION_PART_TWO_TIME_H

class Time2 {

public:
    //不带参数的构造函数,默认构造函数
    explicit Time2();

public:
    int Hour;
    int Minute;
    int Second{0};

};
  • Time.cpp
#include <iostream>
#include "Time.h"

Time2::Time2() {
    Hour = 12;

}
  • main.cpp
#include <iostream>
#include "Time.h"

using namespace std;

int main() {
    //生成对象时,会调用类的构造函数的
    Time2 mytime2;
    return 0;
}

没有构造函数时, 类对象怎么初始化呢?

  • 默认初始化,类通过一个特殊的构造函数来执行默认的初始化构成,这个函数就叫做默认的构造函数,也就是无参的构造函数

  • 如果在类定义中没有构造函数的情况下,编译器就会隐式的自动定义一个默认构造函数,不带参数,无参的,被称为"合成的默认构造函数"

  • "合成的默认构造函数"的作用是什么呢? 如果有初始值,就把初始值赋给对应的成员变量,其他的就是随意赋值,一般来讲最好还是自己写构造函数

  • 一旦我们自己写了一个构造函数,不管构造函数带几个参数,编译器都不会为我们创建"合成的默认构造函数"

5. =default, =delete

  • c++11标准引入的

  • =default: 编译器能够为我们自动生成函数体(带参数的构造函数不可使用,非特殊函数也不可使用)

 Time2() = default;
  • =delete: 让我们显式的禁用某个函数
// 没有不带参数的构造函数,所以定义对象失败
    Time2() = delete;

关于c语言入门到c++使用高手的完整章节在这篇博客中,建议收藏!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章