C++ 继承 8--两义性在重载时的一些问题

原创 2018年04月16日 16:11:49
#include <iostream>
#include <string>
using namespace std;
/*---------------------------------
       12-15两义性在重载时的一些问题
---------------------------------*/
class a
{
public:
void hello()
{cout<<"基类a的hello函数"<<endl;}
void hello(int i)   //重载hello
{
cout<<"a.hello(i):"<<i<<endl;
cout<<"基类a的带一个参数的hello函数"<<endl;
}
};
class b:public a
{
public:
void hello()       //父类的hello被子类改造 无const修饰符->屏蔽隐藏父类的hello函数;在虚函数里,将破坏多态性
// void hello()const  //父类的hello被子类改造 有const修饰符->覆盖替换父类的hello函数;在虚函数里,将支持多态性
{cout<<"子类b的hello函数"<<endl;}
void hello(int i)  //子类b中重载hello
{
cout<<"b.hello(i):"<<i<<endl;
cout<<"子类b的带一个参数的hello函数"<<endl;
}
};
int main()
{
b b;
b.hello();  //由于继承并改造了hello(),则调用的是子类的hello()
b.hello(1); //如果子类b中没有重载hello,会编译出错,因为父类的hello被子类改造了


cout<<"-----------------------"<<endl;


a a;
a.hello();
a.hello(2);
return 0;

}


运行结果:

子类b的hello函数
b.hello(i):1
子类b的带一个参数的hello函数
-----------------------
基类a的hello函数
a.hello(i):2
基类a的带一个参数的hello函数
Press any key to continue

自定义控件——继承已有控件

-
  • 1970年01月01日 08:00

C++构造函数重载以及默认参数引起的二义性

大家都知道当我们声明一个类时,系统会提供一个默认构造函数。当我们需要提供参数进行对类数据成员进行初始化时,就需要对类的带参构造函数进行重载。同时,如果我们需要调用默认构造函数进行类数据成员的初始化时,...
  • zhangyongjun_2012
  • zhangyongjun_2012
  • 2013-06-11 19:13:51
  • 3338

虚基类不会产生两义性

#include using namespace std; class human {     public:     void stand(){cout }; class father...
  • Arivn_emb
  • Arivn_emb
  • 2013-11-21 16:18:16
  • 402

C++构造函数的二义性

#include using namespace std; class Dog{ private: int y; public: Dog(); Dog(int y); }...
  • laohan_
  • laohan_
  • 2012-04-10 17:16:55
  • 388

C++中的重载运算符、继承、封装、多态讲解(进阶篇)

上次我们说到C++语言中的面向对象基本概念,那就是什么是类什么是对象,他们之间的关系是什么,本篇博文我们来说说,C++语言中重要的几个机制。(面试也经常会被问到这些知识点) 一个类可以派生自多...
  • songkai320
  • songkai320
  • 2016-07-15 10:16:31
  • 1303

C++ 对于多重继承 重载operator = 时候的细节注意

// 1233.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" class CA { public: CA(){b = 10;}; ~CA(){}; C...
  • jangdong
  • jangdong
  • 2014-12-02 19:14:47
  • 1032

关于C++中的继承和重载的区别

C++中的很多特性光从概念上的话,很难做区分。或者说,概念让人容易模糊,比如说函数重载和函数继承。        先说重载,重载分为操作符重载和函数名重载,其中,操作符重载就是对运算操作符的原有功能...
  • helinlin007
  • helinlin007
  • 2016-06-02 18:33:46
  • 7834

C++函数重载过程中的二义性和类型转换

【学习于C语言中文网,请勿转载】 发生函数调用时编译器会根据传入的实参的个数、类型、顺序等信息去匹配要调用的函数,这在大部分情况下都能够精确匹配。但当实参的类型和形参的类型不一致时情况就会变得稍微复...
  • czg13548930186
  • czg13548930186
  • 2017-07-25 11:12:37
  • 964

C++为什么可以进行函数重载以及引起的二义性问题

关于C++中函数重载是在C语言基础上的一大特色,不过有好也有坏,虽然C++的函数重载大大方便了编程人员,但是却有时候使用不当会引起问题,最典型的就是函数重载的二义性问题。首先我们知道C++函数重载的条...
  • Loving_Forever_
  • Loving_Forever_
  • 2016-05-21 22:09:50
  • 2207

C++面向对象技术完全剖析_源代码(继承,封装,多态,虚函数,纯虚函数,虚拟继承,多重继承,函数重载,指针……)

  • 2008年11月27日 21:26
  • 920KB
  • 下载
收藏助手
不良信息举报
您举报文章:C++ 继承 8--两义性在重载时的一些问题
举报原因:
原因补充:

(最多只允许输入30个字)