类常用的基本修饰符

一、const成员函数
C++的内部成员函数的参数都有隐含的this指针(除构造函数外,因为在构造函数时才进行对象的实例化,才生成对象this的地址),该指针是对象的地址。
const 修饰成员函数时,实际修饰的是隐含的this指针,指明this(对象)不可修改。所以:
const的对象只能调用const的成员函数,非const 的对象也可调用const的成员函数
const的成员函数不可调用非const的成员函数。

二、内联函数
内联函数:在函数前加inline关键字修饰的函数和默认的类内部的成员函数。
注:声明是加关键字不能指明是内联函数,必须在定义时添加。
内联函数调用时不建立栈帧,而是直接将代码拷贝到函数内进行展开。
优点:无栈帧的开销,效率高
缺点:导致代码大幅度增长,不适用代码长和循环,递归调用的函数。
内联函数只是一个建议,编译器会根据情况进行优化,选择是否使用内联。(如:循环,递归时就不会使用内联)
使用内联函数可替代宏函数,const常量替代宏常量,解决宏的缺陷问题

三、友元
友元函数:在类内部声明函数时,添加关键字friend,则指明该函数为类的友元函数。友元函数可使用类内部的所有成员(包括私有的)
友元类:在类内将某一个类的声明前加关键字friend,则该类为类的友元类,友元类可使用类内部的所有成员(包括私有的)
友元在一定程度上破坏了类的封装性(使外部的友元可访问类内部的私有成员)。

四、 static成员
static修饰类内部的成员时,该成员为该类所有对象共有,存储在静态区。
由于静态成员和成员函数不属于某一对象,存储在文字常量区,所以对对象求大小时,不计算静态成员和成员函数所占空间的大小
static修饰的成员只能在类外定义(类内可声明)和初始化,初始化需使用 类名::变量名(或函数)的方法进行定义(使用)

五、 N中构造拷贝构造的优化
Test1中调用了__2_次AA的拷贝构造函数,_2__次AA的赋值运算符函数的重载。
Test2中调用了__2_次AA的拷贝构造函数,_3__次AA的赋值运算符函数的重载。
Test3中调用了__3_次AA的拷贝构造函数,_0__次AA的赋值运算符函数的重载。
class AA
{};
AA f (AA a) //形参实例化调用拷贝构造和运算符重载函数,生成临时对象
{
 return a ; //返回对象,会调用拷贝构造,和运算符重载将对象放到返回内存中
} //优化时会将对象合并,从而不会按上调用进行。不同编译器的优化程度也不同。
void Test1 ()
{
 AA a1 ;
 a1 = f(a1);
}
void Test2 ()
{
 AA a1 ;
 AA a2 = f(a1);
}
void Test3 ()
{
 AA a1 ;
 AA a2 = f(f(a1));
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值