c++:const&内联&友元&static

1.const修饰成员函数
要声明一个const类型的成员函数,只需在成员函数后面加上关键字const,const修饰this指针所指向的对象;const修饰成员函数保证了调用该成员函数的对象在函数内不会被改变;在类体外定义成员函数也必须加上const。

class DATE{
public:
void show()const;
}

注意:
1)const对象只可以调用const成员函数,因为非const成员函数可能在内部改变了对象;
2)非const对象即可以调用const成员函数又可以调用const成员函数。

2.inline(内联)
c++支持内联函数的目的是提高程序运行效率,是一种以时间换空间的方法,省去了调用函数的额外开销。
在函数定义前加上inline关键字,即可将函数指定为内联函数,注意不是放在声明前。

int max(int a ,int b){
return a+b;
}//普通函数
inline int max(int a ,int b){
return a+b;
}//内联函数

在调用上面两个函数时的区别是:
调用max函数时会进行形成栈帧、释放栈帧、传参等过程,而在调用内联函数时,只需将函数部分展开,节省了空间,如下:

cout<<max(a,b)<<endl;
//编译时展开为:
cout<<(a+b)<<endl;
//减少了把max写为函数的开销

内联函数的这个特点与宏定义有些相似,复习一波有关宏的优缺点
优: 提高性能,增强代码复用性;
缺:不做参数类型检查,传参时要小心;降低代码执行效率;不便调试,可维护性差。
内联在使用是也要慎用:
内联以代码拷贝为代价,省去了函数调用的开销,从而提高程序执行效率;在函数代码过长时不宜使用内联,因为会导致可执行代码膨胀;若函数体内出现循环或其他复杂的控制结构不适合使用内联,因为函数执行代码的时间比函数调用开销大。

3.友元
c++中友元函数用关键字friend说明,友元函数可以在类外访问该类中的任何成员,这点和成员函数一样。

class DATE{
friend void Display( const Date & d);
private :     
int _year ;       
int _month ;       
int _day ;  
};

特点有:
1)友元函数不是类的成员函数,所以不需要用“::”说明属于哪个类;
2)友元函数不可以直接访问类的成员;
3)友元函数可通过对象访问所有成员,私有和保护成员也一样;
3)调用友元函数时,在参数中要指出访问的对象;
4)类和类之间的友元关系不能继承。

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

class Time {  //Date是Time的友元,Date可以访问Time的所有成员。    
 friend class Date; 
 private :     
 int _hour ;     
 int _minute ;     
 int _second ; 
 };
class Date { 
public :     
void Display (){          
cout<<"hour:" <<_t. _hour<<endl ;          cout<<"minute:" <<_t. _minute<<endl ;          cout<<"second:" <<_t. _second<<endl <<endl;   
// 定义为友元类后,可以访问Time类对象的所有成员
}

4.static(类的静态成员)
在类里面用static修饰的成员称为静态成员,类的静态成员是属于整个类所有的,可通过类名和对象名直接访问public静态成员,静态成员函数可直接访问静态成员变量。
静态成员函数也是直接通过关键字static定义。

class Test
{
  private:
        static int a;       
  public:  
        static int Display()
        {
            return a;    
        }

静态成员函数和普通成员函数的区别是:
类对象中的成员变量和成员函数是分开存储的,普通成员变量存储于对象中,成员函数存储于代码段中;静态成员变量是存储于数据段中。

静态成员函数没有隐含this指针参数,可使用类型::作用域访问符直接调用静态成员函数。
静态成员函数不可以访问非静态成员,若要引用,得通过参数传递的方式得到对象名,然后再通过对象名引用;
非静态成员函数可以访问静态成员。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值