C++继承时子类定义同名成员变量时的调用继承函数的问题
来源:互联网 发布:linux 22端口 编辑:程序博客网 时间:2024/05/11 19:47
代码如下:
#include<iostream>using namespace std;class Base{public: int a; Base() { a=0; cout<<"I`m base Begin"<<endl; } int Print() { cout<<a<<endl; return 1; } ~Base() { cout<<"I`m base End"<<endl; }};class Simple: public Base{ public: int a; Simple() { a=1; cout<<"I`m Simple Begin"<<endl; } ~Simple() { cout<<"I`m Simple End"<<endl; }/** void Print() { cout<<a<<endl; }*/ };main(){ Simple b; b.Print(); cout<<b.a<<endl;}
输出结果是0,1。而不是1,1。为什么不同呢?
解释:
因为在继承的时候,允许子类存在与父类同名的成员变量,但是并不覆盖父类的成员变量,他们同时存在。
首先在base里面有一个 a 变量,然后在simple里面又有一个 a 变量。在孩子类创建对象时,会先调用父类的构造函数,先为父类的 a 变量初始化,然后调用孩子类的构造函数来初始化自己的变量,因为给孩子类中没有定义print函数,所以会按照就近原则去寻找父类中是否有print函数。恰好父类中有这个函数,于是调用父类的print函数b.print(),而这个函数会调用父类的a变量。
b.a就就近调用孩子类的a变量。
按照就近原则调用,如果自己的类中定义了接口就调用自己的,如果没有就去父类、祖父类....... 去找,然后调用。 0 0
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- C++继承时子类父类同名成员变量的问题
- 继承中的同名成员变量和同名成员函数
- 继承中的同名成员变量和函数
- [C++] 继承与同名成员变量
- c++继承父类的子类,如何调用父类的同名函数?
- 父类、子类成员同名时的歧义
- java类继承中父类调用子类函数的问题
- 继承 子类对父类成员变量的覆盖
- 继承中同名成员的处理方法
- 方法和变量的继承中的同名问题
- Java 中继承之后同名静态变量的问题分析
- 子类继承父类,那么子类实例化时对象调用的是父类还是子类的构造函数?
- C++继承基类与子类中的同名变量与同名函数
- 【继承与多态】C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态
- 【继承与多态】C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态
- 关于Xcode上的Other linker flags
- 轻松理解makefile编写
- 小老虎的微信公众号:iITObserve
- 笔试题之一
- eclipse常用快捷键
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- Java IO
- adb connect 命令快捷键设置
- 仿网易ios滚动条控件的实现
- Linux查看端口占用情况
- Hibernate连接mysql中文乱码
- 设计模式学习之简介
- 基于字节码指令理解Java中间缓存变量机制
- 在VC++中使用MASM-构建32位程序的必须配置