C++一些细节

用C++编程,一些细节工作中使用不到,也没有考虑过。

有时候,想一想一些细节问题,感觉还真的不能用十分肯定的语气回答。

所以陆续总结了一些C++语言中的小细节。。。。

 

1.隐藏:

派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。

 

派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏。

2.inline要和函数体在一起才会被编译为内联函数。

3.构造函数

1)当派生类定义了一个构造函数,不管是有参数还是无参数。基类必须定义无参构造函数。

2)派生类总是调用基类无参构造函数。

3)派生类D,可以这样声明对象D ad(10);调用了派生类的参数构造函数和基类的无参构造函数。

   但是,当这样声明D ad();时,不会调用基类或派生类的任何构造函数,ad也不是个对象。

4.继承规则

 

若在逻辑上BA的“一种”,并且A的所有功能和属性对B而言都有意义,则允许B继承A的功能和属性。

 

5.const类成员常量,初始化必须在构造函数的初始化列表中初始化,没给构造函数都要对它进行初始化。

 

  int const *a; //a可变,*a不可变

  int *const a; //a不可变,*a可变

 

 

6.赋值运算符重载

赋值运算符不像拷贝构造函数,是对一个已经存在的对象赋值。(初始化虽然也有=号,调用的是拷贝构造函数) 

所以往往考虑以下情况:
// (1)检查自赋值
 if(this == &avg)
  return *this; 

// (2) 释放原有的内存资源  
// (3)分配新的内存资源,并复制内容
// (4)对基类的数据成员重新赋值
 Base::operate =(other); // 因为不能直接操作私有数据成员

// (5)对派生类的数据成员赋值
// (6)返回本对象的引用
 return *this;
深度赋值要考虑到2,3的情况。

 

7.仿函数

  C++一些奇怪的使用往往是从重载运算符开始。

 定义类,重载类的()运算符,为类声明对象。这个对象就当作函数来使用。

 

struct STest   

{   

void operator()( int i );   

}   

STest  functioner; 

 

functioner(100);

 

 

 

 

(未完待续)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值