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的类成员(成员变量或成员函数)称为类的静态成员
特性:
- 静态成员为所有类对象共享,不属于某个具体的实例
- 类静态成员计用类名::静态成员或者对象.静态成员来访问
- 类静态成员变量必须在类外定义,定义时不添加static关键字
- 类静态成员函数没有默认的this指针,因此它里面不能使用任何非静态成员
- 静态成员和普通成员一样,也有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.非静态成员函数可以访问静态成员函数吗?
可以访问