更多点子: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的赋值运算符函数的重载。
只有在一个表达式里,两个临时变量在一块,才能优化
已经存在的对象就不能优化,临时生成的对象跟马上创建的对象就可以优化
如果有什么不对的地方,可以评论告诉我,望指导!