1.const成员函数
const Date d2(d1);或者const Date d2=d1;//拷贝构造函数
void show() const
{
cout<<_year<<"-"<<_month<<"-"<<_day<<endl;
}
Date* operator&()
{
return this;
}
const Date* operator&() const//构成重载
{
return this;
}
2.内联函数:没有压栈的开销
inline int add(int a,int b)
{return a+b;}
①以空间换时间,省去调用函数额开销。代码很长或者有循环或者递归的函数不宜使用内联②inline对于预编译区而言只是一个建议。编译器会自动优化,如果定义为inline的函数体内有递归等等,编译器优化时会忽略掉内联。③inline必须和函数定义在一起,才能成为内联函数,仅将inline放在声明前是不起作用的。④定义在类内的成员函数默认定义为内联函数。
3.友元
class Date{
friend void show(const Date& d);//友元函数
friend AA;//友元类
friend ostream operator<<(ostream& out);
}
4.static成员
size_t Date::_count=;
static int GetCount()//无this指针
{
return _count;
}
5.N中构造拷贝构造的优化Test1中调用了0次AA的拷贝构造函数,2次AA的赋值运算符函数的重载。
Test2中调用了1次AA的拷贝构造函数,2次AA的赋值运算符函数的重载。
Test3中调用了1次AA的拷贝构造函数,3次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));
}