C++基础09---类内初始化,默认构造函数

1. 类内初始化

1.1 声明时初始化成员变量
#ifndef DAY02_TIME_H
#define DAY02_TIME_H

//类的声明
class Time
{
public:
    int m_Hour = 8;   //可以在声明时为类内对象提供初始值
};

#endif //DAY02_TIME_H
#include <iostream>
using namespace std;
#include "Time.h"


int main() {
    Time time1;
    cout << time1.m_Hour << endl;  //8
}
1.2 const成员变量的初始化

const成员变量的初始化主要通过两种方式:
(1)在变量声明时给初值进行初始化。
(2)利用构造函数的初始化列表进行初始化。

#ifndef DAY02_TIME_H
#define DAY02_TIME_H

//类的声明
class Time
{
public:
    int m_Hour = 8;
    const int m_Minute = 18;   //const成员变量,在声明时为类内对象提供初始值
    const int m_Second;

public:
    Time(int hour);
};

#endif //DAY02_TIME_H
#include <iostream>
using namespace std;
#include "Time.h"


Time::Time(int hour) : m_Second(18)   //const成员变量可以利用构造函数初始化列表进行初始化
{
    m_Hour = hour;
//    m_Minute = 10;    //错误,const成员变量不可通过赋值进行初始化
//    m_Second = 5;
}

int main() {
    Time time1(18);
    cout << time1.m_Hour << ":" << time1.m_Minute << ":" << time1.m_Second << endl; //18:18:18
}

2.默认构造函数

2.1 定义

不带参数的构造函数被称为默认构造函数。
类定义中,在没有构造函数的情况下,系统会自动为我们隐式的定义一个默认构造函数。
一旦我们自己定义了一个构造函数,不管该构造函数带几个参数,编译器都不会为我们创建合成的默认构造函数了。

#ifndef DAY02_TIME_H
#define DAY02_TIME_H


//类的声明
class Time
{
public:
    int m_Hour;
    int m_Minute;
public:
    Time(int);  //创建了带一个参数的构造函数,此时系统不会为我们创建默认构造函数了
};

#endif //DAY02_TIME_H
#include <iostream>
using namespace std;
#include "Time.h"

Time::Time(int): m_Hour(18) {}

int main(){
    Time time1(10);
//    Time time2;  //错误,此时已经没有不带参数的构造函数了(默认构造函数)

}

必须自己写构造函数的情况

#ifndef DAY02_TIME_H
#define DAY02_TIME_H

class OtherClass{
public:
    OtherClass(int ){};
};

//类的声明
class Time
{
public:
    int m_Hour;
    int m_Minute;
public:
    Time();  //为了初始化otherclass的对象,因此不能使用系统的默认构造函数,需要自己实现Time的构造函数
    OtherClass otherclass;
};

#endif //DAY02_TIME_H
#include <iostream>
using namespace std;
#include "Time.h"

//构造函数初始化
Time::Time(): otherclass(10){};

int main(){
    Time time1();

}
2.2 =default

在特殊的函数中,利用=default替代{}

#ifndef DAY02_TIME_H
#define DAY02_TIME_H

//类的声明
class Time
{
public:
    Time();   //默认构造函数
};

#endif //DAY02_TIME_H
#include <iostream>
using namespace std;
#include "Time.h"

Time::Time() = default;   //等价于Time::Time(){}


int main() {
    Time time1;

}
2.3 =delete

=delete:让程序员显示的禁用某个函数

#ifndef DAY02_TIME_H
#define DAY02_TIME_H

//类的声明
class Time
{
public:
    Time()=delete;   //不让系统自动生成默认构造函数
};

#endif //DAY02_TIME_H
#include <iostream>
using namespace std;
#include "Time.h"


int main() {
//    Time time1;   //错误,此时系统不再提供默认构造函数
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值