C++语法笔记(1)

1.重载
发生在同一作用域内叫重载,而覆盖是在类与类之间同名函数的重写
重载条件:函数名一样,但参数列表不一样,可以是参数数量或者类型不一样,而与返回类型无关
覆盖也是如此。

重载与const形参
1)顶层const不影响传入函数的对象。一个拥有顶层const的形参无法和另一个没有顶层const的形参区分开来:

int lookup(int);
int lookup(const int);

int lookup(int *ptr);
int lookup(int* const ptr);
这两两分别都是同一个函数,是无法重载的!

第一组,是传值的形式
第二组,传的是指针,但是当指针传进来时,是无法区分使用的是哪一个函数的。第四个函数是一个指针常量,意思是这个指针所指的内容是可以改变的,但指针本身是不能变的


2)如果形参是某各类型的指指针或引用,则通过区分其指向的是常量对象还是非常量对象可以实现重载,此时const是底层
int lookup(int&);//传引用,非常量
int lookup(const int&)//传引用,常量,可以实现重载

int lookup(int*);//传指针,非常量(指针所指内容可以改变)
int lookup(const int*);//传指针,常量(指针所指内容不能变),可以实现重载

注意,非常量是可以转化成常量,反之不行。所以,上面的四个函数都可以作用于非常量。想想,是不是?

//扫盲区
1)顶层const:表示指针本身是个常量
2)底层const:表示指针所指的对象是一个常量,指针本身指向的地址可以变

指针是对象,但引用不是!!常量指针必须初始化,一旦完成,它的值,也就是存放在指针的那个地址就不能变了。
用于声明引用的const都是底层const:const int &a = b;

常量表达式:是指是编译期间就能确定下来的值,如字面值,但下面这个不是
const int sz = get_size();//sz是一个常量,但不是常量表达式,因为它是在运行时才获取的。
用constexpr 来定义常量表达式:
constexpr int mf = 10;
更多请看《C++ Primer》第五版 P59 constexpr 变量
/




2.默认参数
函数可以指定默认参数,一般在函数声明处进行,已经默认形参的右侧必须都有默认值。

3.静态成员
静态成员是属于类的,而不是某个对象,所以静态成员函数内部不能有this指针,而且静态成员函数不能声明为const(为什么),静态只在声明处指名而不能在定义时指定。
对于静态成员变量在类定义处初始化,只是定义时不能再加static。
初始化:
int CDog::scount = 0;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值