码迷,mamicode.com
首页 > 其他好文 > 详细

overload、overwrite、override

时间:2016-12-05 11:53:54      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:++   相同   ast   ret   修改   rtu   style   void   参数   

1、重载 overload

函数名一样,参数不同(类型、顺序,与返回值类型无关),重载的函数一般在同一个类中

class A
{
public:
  void test() {}   
  void test(int n) {}
  int test(int m) { return 1;} // error,和上一个函数参数相同,非法的重载
};

 

2、覆盖 override

派生类与基类函数同名,参数相同,且基类函数由virtual修饰,覆盖就是常说的虚函数

class A
{
public:
  virtual void test() {}   
  void test(int n) {}
};

class B : public A
{
public:
  void test() {}   // override
};

B b;
b.test();     // 调用B中的test
b.test(2);    // error
b.A::test(2); // right 调用被隐藏的基类函数

 

class A
{
public:
  virtual void test() {}   
  void test(int n) {}
};

class B : public A
{
public:
  void test() {}   // override
};

 

3、重写 overwrite

派生类与基类函数同名,则屏蔽基类函数(虚函数除外,即当基类函数与派生类函数参数相同,且基类为虚函数时,则为覆盖)

此种情况应避免,按照c++设计思想,基类非virtual函数,子类是不需要修改的

class A
{
public:
  void test() {}   
  void test(int n) {}
};

class B : public A
{
public:
  void test() {}   // overwrite
};

B b;
b.test(); // 只能调用B的test函数
dynamic_cast<A>b.test();
b.test(3);// error 基类同名函数被屏蔽了

 

overload、overwrite、override

标签:++   相同   ast   ret   修改   rtu   style   void   参数   

原文地址:http://www.cnblogs.com/laogaoyang/p/6131913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!