c++继承中同名成员处理

所谓同名成员也就是 子类与父类 变量或者成员函数重名

看看以下代码,了解访问方式

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 class father
 5 {
 6 public:
 7     int a = 100;
 8     void fun()
 9     {
10         cout << "father fun " << endl;
11     }
12     void fun(int x)
13     {
14         a = x;
15         cout << a << endl;
16     }
17 protected:
18     int b;
19 private:
20     int c;
21 };
22
23 class son1:public father
24 {
25 public:
26     void fun()
27     {
28         cout << "son1 fun " << endl;
29     }
30     int a = 200;//同名变量
31 };
32
33 void test01()
34 {
35     son1 s1;
36     cout << s1.a << endl;//这是子类的a输出是200
37
38     cout << s1.father::a << endl;//这是父类的a输出100,访问是需要作用域
39 }
40
41 //接下来看看同名成员函数
42 void test02()
43 {
44     son1 s1;
45     //和上面一样的
46     s1.fun();
47     s1.father::fun();
48     //s1.fun(110);是不允许的非法的因为子类的同名函数会隐藏父类的同名函数
49     s1.father::fun(110);
50 }
51 int main()
52 {
53     //test01();
54     test02();
55     return 0;
56 }

我们可以得出结论

1.子类可以直接访问子类中的同名成员

2.子类可以通过添加作用域来访问父类中的同名成员

3.子类中的同名函数会隐藏父类的同名函数,调用时要加作用域

原文地址:https://www.cnblogs.com/mch5201314/p/11594193.html

时间: 2024-11-25 15:21:42

c++继承中同名成员处理的相关文章

C++中的类所占内存空间+继承中的成员访问控制

C++学习之继承中的成员访问控制 C++中的类所占内存空间总结 原文地址:https://www.cnblogs.com/ranjiewen/p/8280915.html

C++学习之继承中的成员访问控制

由基类到派生类的过程中,在派生类里如何访问基类成员,以及派生类对象如何访问基类成员,是根据派生类在从基类派生时是以什么方式进行的派生:public.protect或者private.下面说一下在这三种派生方式下成员函数和成员变量的访问和修改权限.派生类是指直接派生类! [代码1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 c

在java继承中对于成员变量和方法的处理是不同的

body { font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5; } html, body { } h1 { font-size:1.5em; font-weight:bold; } h2 { font-size:1.4em; font-weight:bold; } h3 { fon

C#继承中构造函数,成员变量的执行顺序

public class Animal { static string baseClassName; protected string _skincolor; Instancevariable iv = new Instancevariable("父类实例成员变量"); static Instancevariable siv = new Instancevariable("父类静态成员变量"); static Animal() { baseClassName = &

python多继承中子类访问祖先类的同名成员

子类调用父类的同名成员 方式1: class A: def f_a(self): print("----A----") class B: def f_a(self): print("----B----") class C(A, B): def f_a(self): A.f_a(self) # 子类调用父类同名方法,括号里要写self,表明这是一个类调用 B.f_a(self) # 但这样如果修改了父类方法,那么子类就要多处修改 print('----C----')

[Java] 继承中,父类被覆盖的成员变量、方法的可访问性

在 Java 的继承机制里,在子类内部,可以访问父类被覆盖的变量和方法:在子类外部,可以访问父类的被覆盖变量,但是不能访问父类的被覆盖方法. 父类中被覆盖的方法不能在外部被方法,这是出于封装的考虑. 例子: Super, 父类,拥有一个成员变量 x ,和成员方法 doSomething(). Point,继承 Super, 但覆盖了 Super 的 x 和 doSomething(),拥有自己的同名成员成员 x 和 doSomething(). StaticDemo1, 演示在继承中,在内部,可

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承.(4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承. 分析以上程序示例,主要疑惑点是“子类继承父类的成员变量,父类对象是否会实例化?私有成员变量是否会被继承?被继承的成员变量

面向对象语言成员变量方法可见性在继承中的变化

最近做得的有点杂,接触到几种面向对象的语言,C#,C++,JAVA .在一个情景下,软件的框架已经写好了,我们要对其功能实现增加和修改,这种情况是经常发生的,那么在面向对象的程序设计中我们要怎么做呢.我们都知道面向对象语言有几个特点,多态,封装,继承,既然框架已经写好了,我们修改功能可以考虑用继承的方法去实现新的功能,那么这样做对原有的功能会有影响么?这就涉及到成员变量成员方法可见性在继承中的变化了. 首先,我们看C++ 派生类通过继承,将基类的成员作为自己的一部分,但不同的继承方式导致基类的成

面向对象_继承之后类成员的特点

类中的成员:变量,函数,构造函数 1.变量 如果子类中出现非私有的同名成员变量时 子类要访问本类中的变量用this,this代表的是本类对象的引用 子类要访问父类中的同名变量,用super,super代表的是父类空间 1 public class ExtendsDemo3 { 2 public static void main(String[] args) { 3 Zi z=new Zi();//建立了子类对象,加载子类,但在加载子类前会先加载父类 4 z.show(); 5 //System.