概述
1 const成员函数
1.1 基础知识
1.定义
const成员函数是在类的成员函数的后面加上const关键字,const修饰的是this指针所指向的对象,也就是保证调用这个const成员函数的对象在函数内不会被改变。
2.例子
class Date
{
public:
Date(int year, int month, int day)
:_year(year)
, _month(month)
, _day(day)
{}
void Show() const
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d(2018,5,6);
d.Show();
system("pause");
return 0;
}
3.运行结果如下:(可以看到正确输出)
4.编译器对const修饰的成员函数的处理
1.2 const修饰成员函数的扩展
1.非const对象可以调用const成员函数
2.const对象不能调用非const成员函数
3.const成员函数不能调用非const成员函数
4.非const成员函数可以调用const成员函数
2 inline(内联)函数
1.定义:
用inline修饰的函数叫做内联函数,编译时C++编译器会调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。
2.例子:
class Date
{
public:
Date(int year, int month, int day)
:_year(year)
, _month(month)
, _day(day)
{}
void Show();
public:
int _year;
int _month;
int _day;
};
inline void Date::Show() // 成员函数定义为内联
{
cout << _year << "-"<< _month << "-" <<_day << endl;
}
3.注意:
(1)inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的的函数不适宜使用内联。
(2)inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等等,编译器优化时会忽略掉内联。
(3)inline必须与函数定义放在一起,才能成为内联函数,仅将inline放在声明前是不起作用的。
(4)定义在类内的成员函数默认定义为内联函数。
3 友元
3.1 友元函数
1.定义
在一个函数的声明前面加上friend关键字,表示该函数为某个类的友元函数,则该函数可以访问类的私有或保护成员,友元函数不是类的成员函数。
2.例子
(1)如果在类外的一个函数想访问该类的私有或保护成员,如果不定义为友元,则无法访问私有成员。
(2)友元函数的书写
class Date
{
friend void Show(const Date& d);
public:
Date(int year, int month, int day)
:_year(year)
, _month(month)
, _day(day)
{}
private:
int _year;
int _month;
int _day;
};
void Show(const Date& d)
{
cout << d._year << "-" << d._month << "-" << d._day << endl;
}
运行结果:
3.2 友元类
1.如果想让某个类里访问另一个类的私有或保护成员,则将该类声明为那个类的友元类。
2.友元类的书写
class Date
{
friend class Time;
public:
Date(int year, int month, int day)
:_year(year)
, _month(month)
, _day(day)
{}
private:
int _year;
int _month;
int _day;
};
class Time
{
void Show(const Date& d)
{
cout << d._year << "-" << d._month << "-" << d._day;
}
};
4 static
4.1 static修饰成员变量
1.在一个类的成员变量前面加上static关键字
2.例子
class A
{
private:
static int count;
};
3.注意
(1)static修饰的成员变量必须在类外进行初始化。
- 若不在类外进行初始化,则会出现下面错误
- 在类外进行初始化正确的书写格式
class A
{
private:
static int count;
};
int A::count = 0;
(2)类的静态成员为类的所有对象所共享。
4.2 static修饰成员函数
1.在一个类的成员函数前面加上static关键字,则该函数称为类的静态成员函数。
2.例子:
class A
{
public:
static void Show()
{
cout << count << endl;
}
private:
static int count;
};
3.注意:
(1)类的静态成员函数没有this指针。
例如:
下面代码运行错误,因为静态成员函数没有this指针,所以不能访问类的普通成员变量(类的成员变量通过隐含的this指针来访问的)
(2)类的成员函数与成员变量都为类的所有对象所共享,也可以通过类名来进行访问。
例如:
最后
以上就是标致小松鼠为你收集整理的C++ -- 类和对象之const成员函数,inline函数,友元,static成员的全部内容,希望文章能够帮你解决C++ -- 类和对象之const成员函数,inline函数,友元,static成员所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复