const成员、构造函数-初始化列表、static成员、匿名对象详解!

1.const修饰类的成员函数

  • 示例1:
    在这里插入图片描述

  • 示例2:
    在这里插入图片描述

2.再谈构造函数

构造函数有两种初始化成员变量的方法:

1. 在创建对象时定义成员变量,在构造函数体内对成员变量赋

相当于 :
int a;
a = 1;

Date(int year = 2020, int month = 3, int day = 3)
{
    //在构造函数体内对定义好的成员变量进行赋值
	_year = year;
	_month = month;
	_day = day;
}
int main()
{
	Date d;                   //创建对象时定义了成员变量
	return 0;
}

2. 用初始化列表,定义成员变量的同时对其进行赋值

相当于 int a = 1;

Date(int year = 2020, int month = 3, int day = 3)
	//在初始化列表定义成员变量的同时对其进行赋值
	:_year(year)
	,_month(month)
	,_day(day)
{}

初始化列表的作用:
由初始化列表的特性可知,需要在定义同时赋值的变量就必须使用初始化列表对其初始化。
必须要在定义时初始化的变量有:

1.const修饰的变量
2.引用类型的变量
3.没有无参构造函数的自定义类型

注:初始化列表初始化成员变量的顺序初始化列表中的排序无关,只与类中成员变量的声明顺序有关

3.static成员

用static修饰的类成员称为静态成员,静态成员变量需要在类外初始化。

  • 静态成员变量
    静态成员变量不属于某个对象,而属于类的所有对象,在静态区,初始化要在类外

求一个类创建了多少个对象,就要用到静态成员变量用来计数

class A
{
public:
	A()
	{
		count++;
	}
private:
	static int count;   //声明一个静态成员变量计数,因为他被所有对象共用
};
int A::count = 0;       //在类外初始化静态成员变量
  • 静态成员函数
class A
{
public:
    A()
	{
		count++;
	}
	static int GetCountA()    //形参没有this指针,因此函数中不能访问费静态成员
	{
		return count;
	}
private:
	static int count;
};
int A::count = 0;       //在类外初始化静态成员变量

int main()
{
	A a1;
	cout << A::GetCountA() << endl;
	return 0;
}

静态成员函数没有this指针,调用时不能用 对象.函数名() 调用,要用 A::函数名() 调用 。
静态成员函数中不能访问非静态成员函数或变量(没有this指针)

注:C++11中,非静态成员变量在声明时可以给缺省值,调用默认构造函数时就会用该缺省值对成员变量进行初始化,解决了默认构造函数对内置类型不做处理的问题。

4.匿名对象

顾名思义,匿名对象就是类创建出的没有名字的对象,特点:

  • 匿名对象的生命周期只在定义的那一行。
class A
{
public:
	A(int n=0)
	:_n(n)
	{}
private:
	itnt _a;
};

int main()
{
	A(1);         //匿名对象,生命周期只在这一行
	A a1();
	return 0;
}

匿名对象的使用场景:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值