【c++】类的const成员和static成员

1.const修饰类成员

const 成员函数:在成员函数后面加const,const修饰this指针所指向的对象,也就是保证调用这个const成员函数的对象在函数内不会被改变

const使用场景

  • const修饰形参,一般和引用同时使用
  • const修饰返回值
  • const修饰类数据成员,必须在函数的初始化列表初始化
  • const修饰类成员函数,实际修饰隐含的this指针,表示在类中不可以对类的任何成员进行修改
  • const修饰的成员函数中要对类的某个数据成员进行修改,该数据成员必须定义声明是必须加mutable关键字
class Date
{
public:
	Date(int year=1900,int month=1,int day=1)
		:_year(year)
		,_month(month)
		,_day(day)
	{
	
	// Date* const this     this指针不能被修改
	void SetDay(int day)
	{
		_day = day;
	}

	// const Date* const this   this指针内的成员不能被修改
	int GetDay()const
	{
		return _day;
	}

	void Func1()
	{}

	void Func2()const
	{}

	// const Date* const this===》只读
	void FuncWithConst()const
	{
		// Func1(); Date* const this==》this指向对象可读写
		Func2();  // const Date* const this
	}

	// Date* const===》可读写
	void FuncWithoutConst()
	{
		Func1(); //Date* const this==》this指向对象可读写
		Func2();  // const Date* const this
	}

private:
	int _year;
	int _month;
	int _day;
};

1.const对象可以调用非const成员函数吗?

不可以-->权限放大

2.非const成员可以调用const成员对象吗?

可以-->权限放小

3.const成员函数可以调用其他的const成员函数和非const成员函数吗?

可以,不可以

4.非const成员函数可以调用其他const成员函数和非const成员函数吗?

可以,可以

2.静态成员

类的静态成员:声明为static的类成员(成员变量或成员函数)称为类的静态成员

特性:

  1. 静态成员为所有类对象共享,不属于某个具体的实例
  2. 类静态成员计用类名::静态成员或者对象.静态成员来访问
  3. 类静态成员变量必须在类外定义,定义时不添加static关键字
  4. 类静态成员函数没有默认的this指针,因此它里面不能使用任何非静态成员
  5. 静态成员和普通成员一样,也有public,protected,private3种访问级别,也可以具有返回值,const修饰符等参数
#include <iostream>
using namespace std;

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

	Date(const Date& d)
		:_year(d._year)
		,_month(d._month)
		,_day(d._day)
	{
		++_count;
	}

	void show()const
	{
		cout<<"show()"<<endl;
		GetCount();
	}

	//没有this指针,不能使用任何非静态成员
	static int GetCount()
	{
		//_year=10;
		//show();
		return _count;
	}

private:
	int _year;
	int _month;
	int _day;

	static int _count;
};

int Date::_count =0;

int main()
{
	Date d1(2018,3,29);
	Date d2(2018,3,28);

	cout<<d1.GetCount()<<endl;
	cout<<d2.GetCount()<<endl;
	cout<<Date::GetCount()<<endl;
	return 0;
}

1.静态成员函数可以访问非静态成员函数吗?

不能访问,静态成员没有this指针

2.非静态成员函数可以访问静态成员函数吗?

可以访问



猜你喜欢

转载自blog.csdn.net/lw__sunshine/article/details/81032877