3-4 类内初始化、默认构造函数、=default

 

3-4 类内初始化、默认构造函数、=default

类内相关非成员函数

可以直接放在类得声明与定义文件中。

class Time{
public:
    int Hour{ 1 };
};

void func(Time &mytime);

类内初始化

在C++11,我么可以为类内成员变量提供一个初始值,则我们在创建对象的时候,这个初始值就用来初始化该成员变量。

//Time.h
class Time{
public:
    int Hour{ 1 };
    int Minute{ 4 };
    const int C_Second{ 0 };

    Time(const int& tmp_hour, const int& tmp_minute, const int& tmp_second);
    Time(const int& tmp_hour, const int& tmp_minute);
};
 
 
//Time.cpp
Time::Time(const int& tmp_hour, const int& tmp_minute, const int& tmp_second)
    :Hour(tmp_hour), Minute(tmp_minute), C_Second(tmp_second){
 
}
 
 
Time::Time(const int& tmp_hour, const int& tmp_minute)
    :Hour(tmp_hour){    //调用这个构造函数时,因为没有初始化C_Second所以C_Second会被赋予类内初始化时的值
 
}
 
 
//file.cpp
 
#include "Time.h"
 
int main(){
    Time mytime { 2 };
    cout << mytime.Hour << endl; //2
    cout << mytime.Minute << endl; //4
    cout << mytime.Second << endl; //0
}

const成员变量的初始化,在构造函数的初始化列表里进行,不可以通过赋值来初始化。

 

默认构造函数

//Time.h
class Time{
public:
    int Hour{ 0 };
    int Minute{ 0 };
    const int C_Second{ 0 };
};
 
 
//file.cpp
#include "Time.h"
 
int main(){
    Time mytime;
    cout << mytime.Hour << endl; //Hour = 0
    
}
//Time.h
class Time{
public:
    int Hour;
    explicit Time();
};

//Time.cpp
Time::Time()
{
   Hour = 2;
}

//file.cpp
#include "Time.h"
 
int main(){
    Time mytime;
    cout << mytime.Hour << endl; 
    
}

默认构造函数,即没有参数的构造函数就是默认构造函数。

没有构造函数,这些类对象时如何调用的?这叫做默认初始化,也就是说类通过一个特殊的构造函数来执行默认的初始化过程。

这个特殊的构造函数就叫做“默认的构造函数”。也就是无参的构造函数。

在类定义中,如果没有构造函数的情况下,编译器会为我们隐式的自动定义一个默认的构造函数。称为“合成的默认构造函数”。

一旦我们自己写了一个构造函数,不管这个构造函数带几个参数,编译器就不会为我们创建“合成的默认构造函数”。

=default,=delete

=default 编译器能自动为我们生成函数体,一般只能以用于默认的特殊成员函数。

带参数的构造困数,不可以使用= default:

= delete:让程序员显示的禁用默认构造函数。

//Time.h
class Time{
public:
    int Hour{ 0 };
    int Minute{ 0 };
    const int C_Second{ 0 };
    Time() = default; //编译器能够为 =default;的函数自动生成函数体: {}
};
 
 
//file.cpp
#include "Time.h"
 
int main(){
    Time mytime;
    cout << mytime.Hour << endl; //Hour = 0
    
}

 

https://blog.csdn.net/china_jeffery/article/details/79288103

https://blog.csdn.net/hankai1024/article/details/7947989

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值