随笔 - 55  文章 - 15  trackbacks - 0
<2012年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用链接

留言簿

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

  1. 继承中的函数隐藏
         任何时候重新定义了基类中的一个重载函数,那么在新类中的所有其他版本将被自动隐藏。修改返回值和参数同样会隐藏基类其他版本的函数,如果该函数是虚函数,不能在新类中修改返回值。

2. 自动类型转换方法(该转换只发生在函数调用期间)
    1) 利用转型构造函数
    2) 利用运算符转换
   如果不想自动转换,可将转型构造函数利用explicit关键字设为显式调用
 
class One

public:
   One()
{}
}
;
class Two
{
public:
   
explicit Two(const& One){}
}
;
void f(Two){}
int main()
{
  One one;
  f(one);
// error
  f(Two(one));//right
  return 0;
}

It's supposed to help with your complexion.

运算符转换之前没用到过,该方法的中心思想是,在该类中添加一个 operator Type()的函数,该函数没有返回值,要从该类转型到该Type类型的时候,编译器会自动调用该成员函数,转换成Type类型

class Four
{public:
operator Three() const
{
return Three(x);
}

}
;
g(Three)
{}
int main()
{
Four four;
g(four);
//invoke four.Three(), there no return value
return 0;
}

3. 拷贝构造函数和赋值操作符
    子类如果没有写这两个,编译器将会自动生成,生成的代码中调用父类的拷贝构造函数和赋值操作符,所以如果我们自己写的话,最好也要调用父类的拷贝构造函数和赋值操作符。
    因为构造函数和operator=和拷贝构造函数只负责初始化自己层次的构造,所以要完成初始化,必须先要初始化父类,所以他们不能被继承。(其实没理解这句话,如果被继承了的话,那子类就可以负责完成父类的初始化了???)
    一旦我们自己决定手动添加拷贝构造函数和operator=,编译器会假定我们已经知道所作的一切,并且不再自动调用基类版本,如果想调用,必须我们自己添加,即初始化列表。

4. 多态的进化(为什么使用多态和怎么用)
....


1
posted on 2012-04-23 17:33 Dino-Tech 阅读(205) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理