我是靠谱客的博主 标致小松鼠,最近开发中收集的这篇文章主要介绍C++ -- 类和对象之const成员函数,inline函数,友元,static成员,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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成员所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部