C++继承基类与子类中的同名变量与同名函数
来源:互联网 发布:php trim 不起作用 编辑:程序博客网 时间:2024/05/02 01:43
在C++中,允许基类和子类中含有同名的成员变量或成员函数(包括虚函数和非虚函数),因此在使用时,将会有判断当前作用域有效变量名的问题。
一、基类作用域
在基类作用域(即基类成员函数域)中,所有使用的同名变量和同名函数均为基类中定义的同名成员,而与子类中的同名成员无任何关系。但有一种情况例外,即虚函数。当在基类成员函数中调用虚函数时,不一定必然调用基类中的虚函数,而是根据当前对象的类型决定调用哪个虚函数。
二、派生类作用域
在派生类作用域(即派生类成员函数域)中,默认所使用的同名变量与同名函数为派生类中定义的同名成员,但是可以通过在同名成员之前选择作用域的方法,调用基类的同名成员,例如:
class CBase { string id; string name;public: CBase(string s1, string s2) : name(s1), id("base-"+s2) { } void show() { cout << "name: " << name << endl; cout << "id: " << id << endl; }};class CDerive : public CBase { string id; int age;public: CDerive(string s1, int a, string s2) : age(a), id("DERIVE-"+s2), CBase(s1, s2) { } void show() { cout << "id: " << id << endl; cout << "Base_id: " << CBase::id << endl; cout << "age: " << age << endl; //派生类的内部调用基类的方法 CBase::show(); }};
就可以在CDerive类成员函数中,通过CBase::show()或者CBase::id的方式来调用基类的同名成员函数和成员变量。对于多重继承,这种方式仍然有效。
参考文章:http://www.quanxue.cn/JC_CLanguage/Cpp/Cpp09.html
- C++继承基类与子类中的同名变量与同名函数
- [C++] 继承与同名成员变量
- java 父类子类继承 同名变量 同名方法
- 继承中的同名函数变量以及继承中的构造与析构
- 继承中的同名成员变量和同名成员函数
- C++学习笔记--继承中的同名变量和同名函数
- 继承中的同名成员变量和函数
- Java中关于子类成员变量与父类成员变量同名
- Java 理解 子类成员变量与父类成员变量同名 方法的重写
- java中子类与父类的同名变量覆盖问题
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- c++父类子类同名变量
- 关于Scala子类继承父类属性的问题释疑---子类构造器参数不要与父类属性同名
- 继承中的同名成员变量处理方法
- 多态问题抛出(赋值兼容性原则遇上父类与子类同名函数的时候)
- 实现宏与函数同名
- ubuntu运行sudo命令出现“sudo: /usr/lib/sudo/sudoers.so must be only be writable by owner”的一种解决办法
- ZOJ Problem Set - 1067 Color Me Less
- python线程池(threadpool)模块使用
- 关于判断点是在线段的左侧还是右侧还是在线段上的算法
- hdu 2514 Another Eight Puzzle
- C++继承基类与子类中的同名变量与同名函数
- 程序员技术练级攻略
- 特征选择之互信息
- 新建Cocos2d-x工程 vs2010
- hdu 4541 Ten Googol 小水题
- POJ 1273
- poj 2398 叉积判断点位置
- CSDN论坛管理员太垃圾了,乱删帖子!
- 友善之臂Mini2440之嵌入式Linux上Nand Flash驱动分析