C++_类和对象_C++继承_继承中子类的同名成员处理

createh53个月前 (02-01)技术教程32

然后我们再来看,如果继承的过程中,子类中,也有一个和父类中同名的,变量,或者函数怎么办?

?.

我们先去写个Base类,然后base类中去声明一个

m_A = 100;

这个变量.在构造方法中赋值100;

?

然后我们再去创建一个子类Son,

然后子类中也有个m_A变量,然后子类中的这个变量,赋值的值是200

注意java中的子类和父类中是不能出现重名的变量的,但是c++中是可以的.可以看到

?

然后我们去写个测试类test01

?

然后我们在测试类中去打印Son s创建一个子类对象,然后

调用s.m_A去看看,结果.

?

可以看到是200对吧,也就是,调用的是子类中的m_A变量.

如果直接对象名.m_A变量来调用的话.

?

然后如果我们想调用父类的m_A变量怎么弄?

注意需要加个作用域就可以了,可以看到上面那样

s.Base::m_A 这样来调用

?

然后看到结果可以了.已经能调用到父类中同名的变量了.

?

可以看到上面写了一个总结.

?

然后我们再去,看看如果子类中有跟父类中同名的函数,会是什么样的情况呢?

我们首先在父类中添加一个func函数.

.

?

然后我们接着去调用一下试试,我们写个

test02方法,然后里面创建一个Son对象,然后调用

s.func(),可以看到没有报错,而son子类中,并没有这个func这个方法,

在父类中才有,所以我们就知道了,子类的对象是可以直接去调用父类的

方法的.

执行可以看到没问题

?

然后我们在子类中,也去添加,func这个函数,这个函数和父类中的func函数是重名的,

这个时候,

?

我们再去执行,可以看到,当子类中有跟父类中同名的函数的时候,

实际上,我们用子类对象去调用这个函数,调用的是子类的函数.

?

然后如果我们就是想调用父类的函数怎么办?

可以看到,也是加上作用域就可以了

s.Base::func()

这样就可以了.

执行可以看到,这样父类的func函数,也被调用到了.

?

如果我们在父类中添加一个func(int a),这个带参数的函数呢?

这个时候

?

如果我们调用的时候,直接写

子类的对象s.func(100);

可以看到报错了对吧.

?

如果我们把Son这个子类中的func函数,暂时删除掉以后,我们再去看看.

?

可以看到,这个时候,我们再用子类的对象s,去调用

s.func(100),就不报错了对吧.

就可以直接调用到父类中的有参的,func这个重载的函数了.

?

但是如果我们把子类中的func函数打开.

?

可以看到,用子类的对象s.func(100);

直接调用父类的有参func函数的时候,就报错了.

怎么回事呢?


实际上原因是,如果子类中出现和父类同名的成员函数,子类的同名成员会隐藏掉父类中,所有的同名成员函数,

也就是只要,子类中有跟父类中同名的成员函数,是会优先调用子类中的这个函数的.


当然子类中有这个同名的成员函数,会隐藏父类的所有的同名函数,也包含重载的这个名字的函数了.

所以,当子类中有这个同名函数的时候,调用父类中的有参的这个函数,就调用不到就报错了.

?

但是如果想要调用,也是可以的,那就是加上作用域,可以看到

上面s.Base::func(100);

加上了作用域以后,子类就可以调用父类的,有参的成员函数了.

?

看看结果.


总结一下














相关文章

JAVA教程全集-电子版(中)(java教程电子书下载)

第4章 面向对象的程序设计基础如前所述,Java语言是一种纯面向对象的编程语言,面向对象的程序设计是以类为基础的。从本章开始,我们将从类入手,详细介绍面向对象程序设计的基本思想和方法。本章将简要介绍面...

这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试均可)

方法重载和方法重写的区别方法重写重写体现在继承关系上。 在Java中,子类继承父类,子类就会具备父类所以的特征,以及父类的方法和变量比如动物类有“叫”的方法,小狗小猫分别继承了动物类,重写方法时就可以...

Java:Java中的多重继承问题(java中实现多重继承的方式)

  继承是面向对象编程 (OOP) 语言(如 Java)的主要功能之一。它是一种以增强软件设计中类重用能力的方式组织类的基本技术。多重继承是众多继承类型中的一种,是继承机制的一个重要原则。本文探讨了一...

三石说:java基础 类与对象(java的类和对象怎么理解)

类:类是封装对象的行为和属性的载体,具有相同属行和行为的一类实体。类中包含方法和属性。类中的构造方法:1.构造方法没有返回值2.名称与类名相同,在构造方法中可以为成员变量赋值,也就是初始化成员变量,若...

自学Java6(保姆级教学)——基本数据类型的转换

在上一期的文章中,我们认识了Java的几种运算符,先来简单回顾一下Java共有几类运算符:1.算数运算符:+,-,*,/(加减乘除),加上一个%(取余)2.赋值运算符:=3.关系运算符:˃,˂,==,...

产品设计阶段:To B软件产品设计流程总结

到了产品设计阶段,大部分产品经理(尤其是技术转型的产品经理)终于可以大大的喘一口气了,这个阶段的工作应该是产品人最最熟悉的环节了。网上关于产品设计(我总觉得这个叫需求分析)的方法论还真是多的很,场景分...