在C++的类中,一些关键字修饰成员函数时的位置

在这里插入图片描述
一下只是简略参考多篇博客的阐述:
1、inline:
内联函数,函数的声明与定义前均可加关键字inline,但是在函数声明处加inline虽然没有错,但这种做法是无效的,编译器会自动忽略函数声明处的inline关键字。
例:
#include
using namespace std;

/函数模板/
template
inline void m_swap(T &a, T &b)
{
T tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 3, b = 4;
m_swap(a, b);
cout << a << “\t” << b << endl;
system(“pause”);
return 0;
}
2、static:
不在类中:
修饰变量:
(1)静态全局变量:全局变量与静态全局变量都是存储在数据段(未初始化时存放在BSS段,已初始化存放在静态数据区);这二者的区别在于静态全局变量的作用域是整个源程序,源程序下的多个源文件均可以使用该该全局变量,而静态全局变量则将其作用域限制在定义的源文件内。
静态全局变量只能被初始化一次。
(2)静态局部变量:局部变量的作用域只限于定义它的函数内部,函数执行完,他就会被释放掉,而静态局部变量则扩大了其生存时间,等到main函数结束后,他才被释放掉,相当于扩大了其作用域。
静态局部变量只能被初始化一次
修饰函数:
静态函数与普通函数的作用域不同,用static修饰的函数,限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说它可以被其它代码文件调用。
https://www.cnblogs.com/liuna/p/7238239.html
https://blog.csdn.net/yesyes120/article/details/79519753
在类中:
修饰变量:
静态成员变量:静态成员变量必须初始化,而且只能在类体外进行。静态成员变量在初始化时不能再加 static,但必须要有数据类型。被 private、protected、public 修饰的静态成员变量都可以用这种方式初始化。
例:
class People {
private:
static int a;
};

int People::a = 4;
修饰函数:
静态成员函数:
和静态成员变量类似,静态成员函数在声明时要加 static,在定义时不能加 static。
例:
class People {
private:
static int a;
public:
static void print();
static void m_print() { cout << a << endl; }
};

void People::print()
{
cout << a << endl;
}

int People::a = 4;
https://blog.csdn.net/luoweifu/article/details/39474189
3、const:
(1)修饰普通类型的变量:
如:const int a =4;
那么编译器就会把它看作常量,它的值是不可以修改的。
(2)修饰指针变量
(1)常量指针:const char p = &x;(const修饰,表示不能修改p指向的内容)
(2)常量指针变量:char const p=&x;(const修饰变量名,表示不能修改变量p)
(3)指针常量:const char * const p = &x;(前一个const修饰
,后一个修饰变量名)
(3)修饰函数参数
void print(const int len)
{
//len = 3;
cout << len << endl;
}
在该函数里,传递过来的参数是不可以改变的
(4)修饰函数返回值
如果返回const data,non-const pointer,返回值也必须赋给const data,non-const pointer。因为指针指向的数据是常量不能修改。
例:
const int *get()
{
int *a = new int;
return a;
}

int main()
{
const int *b;
b = get();
delete b;
return 0;
}
如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const 修饰没有任何价值。所以,对于值传递来说,加const没有太多意义。
(5)在类中修饰成员函数
在const成员函数中,不能修改任何类成员变量
例:
class People {
int m_age;
public:
//void set_age() const { m_age = 3; }
void set1_age() const;
};

void People::set1_age() const
{
// m_age = 3;
}
const修饰成员函数时,定义与声明要匹配,都要加const
(6)在类中修饰成员变量
效果和修饰变量一样,但初始化需要构造函数的初始化列表
https://blog.csdn.net/wangkai_123456/article/details/76598917
https://www.cnblogs.com/Forever-Kenlen-Ja/p/3776991.html
https://www.cnblogs.com/xudong-bupt/p/3509567.html
4、friend
在当前类以外定义的、不属于当前类的函数也可以在类中声明,但要在前面加 friend 关键字,这样就构成了友元函数。
声明时前面加friend关键字,定义时不加。
https://blog.csdn.net/ddupd/article/details/38053159
5、virtual
只需要在虚函数的声明处加上 virtual 关键字,函数定义处不可以加。
https://blog.csdn.net/zgaoq/article/details/54964695

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值