c++---const成员函数,内联函数,友元函数,static成员,构造函数的优化

更多点子:c++—目录索引(知识小渠道)


const修饰成员函数:
在成员函数后面加上const,const修饰this指针所指向的对象,也就是保证调用这个const成员函数的对象在函数体内不会被改变
权限可以缩小,但是不可以放大
1. const对象不可以调用非const成员函数
2.非const对象可以调用const成员函数
3. const成员函数内不可以调用其他的非const成员函数
4.非const成员函数内可以调用其他的const成员函数

const operator&() const
{
    return this;
}

inline(内联):
以inline修饰的函数叫做内联函数,编译时c++编译器会调用内联函数的地方展开,没有函数压栈的开销,可以提升程序运行的效率
宏也有这个特性
顺便唠一句 宏的缺点: 1.不可调试 2.没有类型安全的检查 3.可读性差,易出错
宏的优点: 1.增强代码的复用性 2.提高程序性能
inline在debug下不会展开函数,就跟平常的函数一样了,没有那么高的优化了
1. inline是一种一空间换时间的,省去调用函数开销,所以代码很长或者有循环/递归的不适合内联
2. inline对于编译器只是一个建议,编译器会自动优化,如果inline函数内有递归等,编译器优化时会自动忽略
3. inline必须函数定义放在一起,才能成为内联函数,光放在声明前不起作用
4. 定义在类内的成员函数默认定义为inline函数

inline void Date::Show()//成员函数定义为内联
{
    cout<<_year<<end1;
    cout<<_month<<end1;
    cout<<_day<<end1;
}

重载输入输出:

ostream& operator<<(ostream& out,const Date& d)
{
    out<<d._year<<"-"<<d._month<<"-"<<d._day<<end1;
    return out;
}
istream& operator>>(istream& in,Date& d)
{
    in>>d._year;
    in>>d._month;
    in>>d._day;
    return in;
}

友元:
友元函数:
在c++中,友元函数允许在类外访问该类中的任何成员,就像成员函数一样,友元函数用关键字friend说明
1.友元函数不是类的成员函数
2.友元函数可以通过对象访问所有成员,私有和保护成员也一样

class Date
{
    friend void Show(const Date& d);
    ...
}

友元类:
整个类是另一个类的友元,友元类的每个成员函数都是另一个类的友元函数,都可访问另一个类中的保护和私有的数据

class Date
{
    friend class Date;
    ...
}

友元一定程度上破坏了c++的封装

普通的成员变量属于对象,static成员变量属于类也属于类的所有对象,它的初始化在类域上,普通的成员变量在对象创建时。
静态的成员函数没有this指针,所以可以使用类型::作用域访问符直接调用静态成员函数
静态成员函数不可以访问非静态的成员(没有this)
非静态的成员函数可以访问静态成员(大家在一个类里)

N中构造拷贝构造的优化

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)); 
} 
//Test1中调用了_2_次AA的拷贝构造函数,_1_次AA的赋值运算符函数的重载。 a1-AA a ,return a,return的是一份临时变量,所以还得拷贝构造一份
//Test2中调用了_2_次AA的拷贝构造函数,_0_次AA的赋值运算符函数的重载。 a1-AA a,a-a2这一下创建两个变量,合在一起
//Test3中调用了_3_次AA的拷贝构造函数,_0_次AA的赋值运算符函数的重载。 

只有在一个表达式里,两个临时变量在一块,才能优化
已经存在的对象就不能优化,临时生成的对象跟马上创建的对象就可以优化
如果有什么不对的地方,可以评论告诉我,望指导!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值