const修饰成员函数
const修饰成员函数:在成员函数后面加const,const修饰指针所指向的对象,也就是说保证调用这个const成员函数的对象在函数内不会被改变。
class Date
{
public:
void Display()
{
cout<<_year<<_month<<_day<<endl;
}
void Display() const
{
cout<<_year<<_month<<_day<<endl;
}
private:
int _year;
int _month;
int _day;
}
int main()
{
Date d1;
d1.Display();
const Date d2;
d2.Display();
}
内联函数
以inline修饰的函数叫做内联函数,编译时C++编译器会调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序允许的效率。
内联函数是一种以空间换取时间的做法,省区函数调用开销。所以,当函数调用过多或是递归循环的情况下不适合使用内联函数。
内联函数对于编译器来说,只是一个建议,编译器会自动优化,当出现不适合使用内联函数时,编译器会自己忽略该内联。
内联函数必须将inline关键字与定义写在一起才起作用,写在声明前是不起作用的。
定义在类内的成员函数默认定义为内联的。
class Date { public: void Fun()//定义在类内部默认为内联函数 {} void Display(); private: int _year; int _month; int _day; } inlne void Date::Display()//成员函数定义为内联函数 { cout<<_year<<_month<<_day<<endl; }
在《Effiective C++》中的条款02规定:尽量以const,enum,inline替换宏
原因在于宏的不安全性:
宏的优缺点:
优点 | 缺点 |
---|---|
增强代码的复用性 | 宏不方便调试 |
提高性能 | 代码的可读性变差,可维护性变差 |
没有类型安全的检查 |
友元
友元函数的特点:
在C++中友元函数允许在类外面访问该类中的任何成员,就像成员函数一样,友元函数用关键字friend说明。
扫描二维码关注公众号,回复:
2088392 查看本文章
但是注意,友元函数并不是类的成员函数,但是友元函数可以通过对象访问所有成员,包括私有和保护成员。
友元类:整个类可以是另一个类的友元。友元类的每个成员函数都是另一个类的友元函数,都可以访问另一个类中的保护和私有成员。
类的静态成员
在类里面用static修饰的成员,成为静态类成员。类的静态成员是该类型的所有对象所共享。
静态成员函数没有隐含的this指针,所以只能使用域访问符直接调用类的静态成员函数。
class Date
{
public:
Date()
{
cout<<"Date()"<<endl;
++count;
}
void Display()
{
cout<<_year<<_month<<_day<<endl;
}
static void Print()//静态成员函数
{
cout<<"count:"<<count<<endl;
}
private:
int _year;
int _month;
int _day;
static int count;//静态成员变量
};
//定义并初始化静态成员变量
int Date::count=0;
int main()
{
Date d1;
Date::Print();
}