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

createh55个月前 (02-01)技术教程48

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

?.

我们先去写个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中,子类继承父类,子类就会具备父类所以的特征,以及父类的方法和变量比如动物类有“叫”的方法,小狗小猫分别继承了动物类,重写方法时就可以...

父类实现了Serializable,子类不需要实现Serializable

相关注意事项 a)序列化时,只对对象的状态进行保存,而不管对象的方法; b)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口; c)当一个对象的实例变量引用其他对象...

深度分析:理解Java中的多态机制,一篇直接帮你掌握

Java中的多态1 多态是什么多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。用白话来说,就是多个对象调用同一个方法,得到不同的结果。...

交互思考:“重要的小角色”——面包屑导航

导语:我们在设计网站的过程中,一开始的设计便会遇到导航设计,比如面包屑导航;然而对许多设计师来说,面包屑导航往往都是直接照搬,也很少会去注意甚至忽视它的存在。在产品设计多样化的今天,什么样的网站适合用...

深入分析美团和糯米的团购模式(二)

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。第一次动笔写这类型的分析,不到位的地方欢迎大家指正。在此之前我觉得如果不能对团购模式有一个基本的见解,是无法看懂美团,...

面试官问:SpringBoot是什么时候初始化Spring上下文容器的?

点击右上角“关注”,立即查看“Spring-Boot源码分析”系列所有文章。本文是源码分析系列:SpringBoot启动流程的第五篇,主要包含以下源码分析:prepareEnvironment():准...