Linux嵌入式开发学习.c++:day3

【命名规范】
参考Google C++团队,仅供参考。
1.文件命名规则
    文件名全部小写,可以含下划线或连字符,按项目约定命名,且尽量保证文件名明确。比如:
    cmd_save_player_info_class.cpp
    my_use_full_class.h
2. 类命名规则
    类命名每个单词首字母大写(帕斯卡命名法,也成为大驼峰命名法),不使用下划线。
    同时也应用于结构体、枚举等。
3. 变量命名规则
    变量名一律小写,单词使用下划线相连,例如:
    int player_id;
    string table_name;
4.常量命名规则
    k后面跟大写字母开头的单词,比如:
    const int kDaysInAWeek=7;
    const string kCompanyName=”Tecent”;
5.函数命名规则
常规函数每个单词首字母大写,使用命令式语气,比如:OpenFile() CheckFileName(),
而存取函数或短小的内联函数使用小写加下划线,且与访问变量相吻合,比如 set_num_errors();
6.名字空间命名
命名空间全小写,并基于项目名称和目录结构,比如
google_awesome_project
【this指针】
this指针是一个特殊的指针,指向类对象自身的首地址
每个类对象的成员函数都有一个this指针, 指向调用对象,如果要引用整个对象则使用*this
this指针仅能在类内部使用
-当局部变量与成员变量重名时,可以使用this来区分(如this->n = n )
【static关键字(基于C++11)】
1.静态变量
    所谓static的对象,是指在所在的作用域内单独一份。
    其寿命是从构造出来到程序结束为止。
2.静态函数
    静态函数为类的全部服务而不是为某一个类的具体对象服务。
    
【静态变量】
1.存在于全局作用域中的静态变量
2.存在于函数中的静态变量
3.存在于类下面的静态变量
4.存在于类成员函数中的静态变量
类内的静态成员变量的特点:
注意事项:
静态变量在程序中只分配一次内存,只初始化一次。
静态变量在定义时分配空间,并存储在全局数据区。
静态变量主要用在不同的情况下只需要一份相同的数据时
【静态函数】
1.存在于全局作用域的静态函数
2.存在于类中的静态函数
注意事项:
静态函数没有this指针
静态函数可以调用类下的其他静态函数和静态变量,但是不能调用非静态的成员函数和成员变量
成员函数可以任意访问静态函数和静态变量
由于没有this指针的额外开销,因此静态函数与成员函数相比速度上会有少许的增长
【设计模式(Design Pattern) 了解】
是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
以单例模式为例:
如果某个类在程序中各个位置都只需要一个对象,此类可以设计为单例模式。
【const关键字】
1.const成员函数
    const修饰成员函数,表示常成员函数(只读函数)。
    
    常成员函数可以调用非const的成员变量,但是不能修改其数值。
    不能调用非const成员函数。
    1)在类内声明语法形式
        <数据类型> <函数名> (<参数列表>) const;
    2)在类外定义语法形式
        <数据类型>  <类名> :: <函数名> (<参数列表>) const
        {
            ......
        }
只要类方法不修改对象就应该将其声明为const。
2. const对象     const修饰对象,表示该对象为常量对象。
    常量中任何成员变量都不能被修改。
    常量对象不能调用任何非const的成员函数。
定义常对象的一般形式为
        类名 const 对象名[(实参表列)];
也可以把const写在最左面:
        const 类名 对象名[(实参表列)];
3. const成员变量:
const修饰成员变量时,表示该成员变量不能被修改。
const成员变量只能在初始化表中进行初始化。
    
如果一个类对象的数据成员希望被保护,也可以使用const关键字来声明,相当于只读。
    
【友元】
定义:
类实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,仅能通过类的成员函数才能读写。
如果数据成员定义为公共的,则又破坏了封装性。
但是某些情况下,需要频繁读写类的数据成员,特别是在对某些成员函数多次调用时,
由于参数传递、类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。
友元是一种定义在类外部的普通函数,但他需要在类体内进行说明,
为了和该类的成员函数加以区别,在说明时前面加以关键字friend。
友元不是成员函数,但是他能够访问类中的私有成员。
作用
在于提高程序的运行效率,但是,他破坏了类的封装性和隐藏性,
使得非成员函数能够访问类的私有成员。
导致程序维护性变差,因此使用友元要慎用。
使用范围:
友元较为实际的应用是在运算符重载,这种应用可以提高软件系统的灵活性。
友元分类:友元函数、友元类、友元成员函数
【友元函数】
概念:是一种声明在类定义体内的非成员函数
格式:friend 返回值类型 函数名(参数表);//声明
        返回值类型  函数名(参数表){函数体}
说明:
A. 友元函数是在类中说明的一个函数,它不是该类的成员函数,但可以访问该类的所有成员,它是独立于任何类的一般的外界函数。
B. 由于不是类的成员,所以没有this指针,访问该类的对象的成员时必须使用对象名,而不能直接使用类的成员名。
C. 虽然友元函数是在类中说明的,但其名字的作用域在类外
D. 友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。
E. 一个函数可以是多个类的友元函数,只需要在各个类中分别声明。
F. 友元函数的调用与一般函数的调用方式和原理一致。
G. 友元函数可以修改类中成员变量的值
【友元类】
概念:当一个类B成为了另外一个类A的“朋友”时,
那么类A的私有和保护的数据成员就可以被类B访问。
我们就把类B叫做类A的友元。
格式:只要在类A中定义友元类B就可以
        friend class 类名;
        
说明:
A. 友元关系不能被继承。类B虽然是类A的友元,但是两者之间不存在继承关系
B. 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
C. 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的声明
【友元成员函数】
概念:使类B中的成员函数成为类A的友元函数,这样类B的该成员函数就可以访问类A的所有成员了。
格式:在类A中声明类B的成员函数为友元函数
       friend  返回值类型  类名 :: 成员函数名;
说明:
当用到友元成员函数时,需注意友元声明和友元定义之间的相互依赖关系
    
【运算符重载】
概念:
函数可以重载,运算符也可以重载。
C++中预定义的运算符的操作对象只能是基本数据类型。
但实际上对于很多用户的自定义类型,也需要类似的运算操作。
这时可以在C++中重新定义这些运算符,赋予已有运算符新的功能,
使它能够用于特定类型,执行特定的操作。
可以被重载的运算符:
    算术运算符:+、-、*、/、%、++、--
    位操作运算符:&、|、~、^(位异或)、<<(左移)、>>(右移)
    逻辑运算符:!、&&、||
    比较运算符:<、>、>=、<=、==、!=
    赋值运算符:=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=
    其他运算符:[]、()、->、,、new、delete、new[]、delete[]
不被重载的运算符:
    成员运算符“.”、指针运算符“*”、三目运算符“? :”、siezof、作用域“::”
    
【友元运算符重载】
格式:
  声明格式:
    friend 返回值类型 operator <运算符符号>  (<参数表>);
  定义格式:
    返回值类型 operator <运算符符号>  (<参数表>)
    {
        <函数体>
    }
说明:
一般的,友元函数重载双目运算符(有两个操作数,通常在运算符的左右两则),
参数表中的个数为两个。
若是重载单目运算符(只有一个操作数),则参数表中只有一参数。
前置++和后置++怎么区分:
【成员函数运算符重载】
格式:
  声明格式:
    返回值类型 operator <运算符符号>  (<参数表>);
  定义格式:
    返回值类型 类名 ::operator <运算符符号>  (<参数表>)
    {
        <函数体>
    }
说明:
一般的,对于成员函数重载运算符而言,双目运算符的参数表中仅有一个参数,而单目则无参数。同样的是重载,
为什么和友元函数在参数的个数上会有所区别?原因在于友元函数没有this指针。
【注意事项】
重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符
运算符重载的实质是函数重载,遵循函数重载的选择原则
重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构
运算符重载不能改变该运算符用于基本类型对象的含义。它只能和用户自定义类型的对象一起使用,或者用于用户自定义类型的对象和基本类型的对象混合使用时。
运算符重载是针对新类型数据的实际需要对原有运算符进行的适当的改造,重载的功能应当与原有功能相类似,避免没有目的地使用重载运算符
重载运算符的函数不能有默认的参数
一般情况下,单目运算符最好重载为类的成员函数;双目运算符则最好重载为类的友元函数。
以下一些双目运算符不能重载为类的友元函数:=、()、[]、->。
类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。
对于运算符“+ =,-=,/=,*=,&=,!=,~=,%=,<<=,>>=”
,建议重载为成员函数。
对于其他运算符,建议重载为友元函数。
this
static
const
友元
运算符的重载、
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值