c++知识细节-类内初始化/默认构造函数/=default;

c++知识细节-类内初始化/默认构造函数/=default;

类相关非成员函数

详见代码.

类内初始化

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

(1) 没有初始值的成员变量,系统缺省策略为一个不确定的值;没有初始值的静态static成员变量,系统缺省策略为0.

(2) const成员变量只能在声明时或者初始化列表设置初始值,不能在构造函数内部设置初值.且构造完成后,不能再改变其值.

默认构造函数

(1) 没有参数的构造函数,就称为默认构造函数.

(2) 即使不写任何构造函数,类也将通过一个特殊的构造函数来初始化,也就是无参的默认构造函数.此时编译器会为我们隐式地自动定义一个默认构造函数(无参),称为"合成的默认构造函数".前提:没有定义任何构造函数,一旦我们自己写了构造函数,不管这个构造函数带几个参数,编译器都不会为我们创建"合成的默认构造参数"了.

=default; =delete;

(1) c++11标准引入.

//.h
Time2() = default;	//编译器能够为我们自动生成函数体,只适用于这种特殊函数,带参数的和普通函数都不适用
//.cpp
Time2::Time2() = default;

Time2() = delete;	//显式地禁用某个函数

代码

Time.h

#ifndef __MYTIME__
#define __MYTIME__
class Time
{
public:
	int Hour;	//小时
	int Minute; //分钟
	//int Second; //秒钟	
	//类内初始值
	int Second = 0;
	//const成员变量
	const int ctestvalue = 80;
	//普通函数声明
	void writeTime(Time &mytime);
public:
	//构造函数
	explicit Time(int tHour, int tMin, int tSec=30)//默认构造函数
	Time();	//	不加参数
}
#endif

Time.cpp

#include <Time.h>
#include <iostream>

//非成员函数,普通函数
void writeTime(Time &mytime)
{
	cout << myTime.Hour;
}
Time::Time(int tHour, int tMin, int tSec):ctestvalue(80)
{
	Hour = tHour;
	Minute = tMin;
	Second = tSec;
	
	initMillTime(0);
}
Time::Time():ctestvalue(80)
{
	Hour = 12;
	Minute = 59;
	Second = 59;
	
	initMillTime(0);
}

//main.cpp

#include <Time.h>

*/
void main
{
	Time mytime(12,15,17);
	writeTime(myTime);
	
	Time myTime2;	//此时会调用默认构造函数
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在给结构体数组进行构造函数数组初始化时,可以使用花括号{}来为数组的每个元素赋值。在提供的代码中,有几种方式进行了构造函数数组初始化: 1. 使用默认构造函数进行数组初始化:在结构体中定义了默认构造函数,通过直接赋值的方式进行数组初始化。例如,N = { 1,"hello",'c' }。 2. 使用有参构造函数进行数组初始化:在结构体中定义了有参构造函数,通过直接赋值的方式进行数组初始化。例如,N = node(4, "python", 'f')。 3. 使用自定义的初始化函数进行数组初始化:在结构体中定义了自己的初始化函数,通过调用该函数来进行数组初始化。例如,N.init(3, "java", 'e')。 需要注意的是,在建立结构体数组时,如果只定义了带参数的构造函数而没有定义默认构造函数,将会出现数组无法初始化的错误。因此,为了避免这种错误,建议同时定义默认构造函数和有参构造函数。在提供的代码中,结构体node就同时定义了默认构造函数和有参构造函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++中数组初始化方法](https://blog.csdn.net/u011555996/article/details/124414016)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [c++构造函数初始化](https://blog.csdn.net/mayeight/article/details/120929189)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值