学无先后,达者为师

网站首页 编程语言 正文

初始化列表 static成员

作者:DayDay upup 更新时间: 2022-09-22 编程语言

文章目录

    • 1.初始化列表
    • 2.static成员

1.初始化列表

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。

class Date
{
public:
 Date(int year = 1, int month = 1, int day = 1)
 : _year(year)
 , _month(month)
 , _day(day)
 {}
 
private:
 int _year;
 int _month;
 int _day;
};

注:

  1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
  2. 类中包含以下成员,必须放在初始化列表位置进行初始化:
    引用成员变量
    const成员变量
    自定义类型成员(该类没有默认构造函数)
class A
{
public:
 A(int a)
 :_a(a)
 {}
private:
 int _a;
};
 
class B
{
public:
 B(int a, int b)
 :_a(a)
 ,_b(b)
 ,_n(10)
 {}
private:
 A _a; // 没有默认构造函数
 int& _b; // 引用
 const int _n; // const 
};

综上:尽量使用初始化列表初始化

tips:
成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关

class A
{
public:
 A(int a)
 :_a1(a)
 ,_a2(_a1)
 {}
 
 void Print() {
 cout<<_a1<<" "<<_a2<<endl;
 }
private:
 int _a2;
 int _a1;
};
 
int main() {
 A aa(1);
 aa.Print();
}

在这里插入图片描述

2.static成员

特性:

  1. 静态成员为所有类对象所共享,不属于某个具体的实例

  2. 静态成员变量必须在类外定义,定义时不添加static关键字

class A
{
private:
	static int _a;
};
int A::_a = 0;
  1. 类静态成员即可用类名::静态成员或者对象.静态成员来访问
class A
{

public:
	static int _a;
};
int A::_a = 0;
int main()
{
	cout << A::_a << endl;
	return 0;
}
  1. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员

  2. 静态成员和类的普通成员一样,也有public、protected、private 3种访问级别,也可以具有返回值

原文链接:https://blog.csdn.net/zjq_love/article/details/124984040

栏目分类
最近更新