//类继承中的重名成员
#include<iostream>
using namespace std; /*
自己猜想: 对于子类中的与父类重名的成员,c++编译器会单独为子类的这个成员变量再开辟一块内存空间,
把这个重名的成员变量当成子类的独有属性
在子类对象中如果访问重名成员,会默认访问子类独有那个成员变量,而不是访问父类的成员变量 对于从父类继承的所有成员,c++编译器会在子类对象的内存空间前部分放置父类的所有成员
父类的成员函数访问的都是 子类对象中 父类内存空间那部分的成员变量,
--如果不是这样,那么父类中能访问子类成员变量?
又因为子类对象的重名成员 是独立于父类 属于子类对象的一个成员变量 对于被子类继承的父类的成员函数 访问的是父类中的那个重名成员的解释
根据类的对象管理模型,类的非静态成员函数就是一个全局函数,只是函数中默认有一个对象指针参数
对于父类成员函数而言,父类成员函数有一个参数就是父类对象指针,
此时子类对象调用父类成员函数,不就是类的赋值兼容性原则吗--父类指针调用子类对象,
父类对象指针不强转成子类对象指针,那么这个父类指针不是只能访问父类对象的成员吗?
因此得出结论,子类对象调用继承于父类的成员函数 访问的是父类中的那个重名成员
*/ /*
总结:
派生类定义了与基类同名的成员,在派生类中访问同名成员时屏蔽了基类的同名成员
在派生类中使用基类的同名成员,显式的使用类名限定符 ----- 类名::成员
*/ class PointA{
public:
int x;
int y;
void PrintA(){
cout << "x=" << x << ";y=" << y << endl;
}
void PrintB(){
cout << "x=" << x << ";y=" << y << endl;
}
}; class PointB :public PointA{
public:
PointB(){
x = ;
y = ;
z = ;
//在子类内部中给可访问父类成员属性赋值
PointA::y = ;
}
int y;
int z;
void Test1(){
cout << "z=" << z << ";y=" << y << endl;
}
void PrintB(){
cout << "z=" << z << ";y=" << y << endl;
}
}; void ProtectA(){
PointB pb1;
pb1.PrintA();
cout << "----------------" << endl;
pb1.Test1();
cout << "----------------" << endl;
pb1.y = ;
//在子类外部中给可访问父类成员属性赋值
pb1.PointA::y = ;
pb1.PrintA();
cout << "----------------" << endl;
pb1.Test1();
} void ProtectB(){
PointB pb1;
//对于重名函数调用规则和重名变量规则类似
pb1.PrintB();
cout << "--------------------" << endl;
pb1.PointA::PrintB();
} void main(){
//ProtectA();
ProtectB();
system("pause");
}

C++ 类的继承四(类继承中的重名成员)的更多相关文章

  1. c++中的重名问题

    看C++视频教程-范磊主讲(2.91G)视频学习笔记整理. 1.c++为什么要引入名字空间(namespace)? c++引入名字空间这个概念,是为了避免重名问题,比如说避免重复的函数名或者变量名引起 ...

  2. javascript函数中变量重名

    <script type="text/javascript"> function fun(a){ console.log(a); // function var a=1 ...

  3. PHP类(四)-类的继承

    类的继承就是从已经定义的类中继承数据,也可以重新定义或者加入一些数据. 被继承的类称为父类,基类,超类 继承的类称为子类,派生类 在PHP中只能使用单继承,也就是一个类只能从一个类中继承数据,但是一个 ...

  4. Java 面向对象(四)继承

    一.继承的概述(Inherited) 1.由来 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 其中,多个类可以称为 子类(派生类 ...

  5. Linux中mv重命名作用及打包war压缩文件及分配权限

    1.Linux中的重命名文件使用mv命令 touch a.txt 新建一个文件 mv a.txt b.txt 重命名文件为b.txt mkdir abc 新建一个目录 mv abc abd 重命名文件 ...

  6. Java中是否可以继承String类,为什么

    Java中,是否可以继承String类?为什么? 答案: 不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变. public final class ...

  7. 《前端之路》- TypeScript (三) ES5 中实现继承、类以及原理

    目录 一.先讲讲 ES5 中构造函数(类)静态方法和多态 1-1 JS 中原型以及原型链 例子一 1-2 JS 中原型以及原型链中,我们常见的 constructor.prototype.**prot ...

  8. C++中虚继承派生类构造函数的正确写法

    最近工作中某个软件功能出现了退化,追查下来发现是一个类的成员变量没有被正确的初始化.这个问题与C++存在虚继承的情况下派生类构造函数的写法有关.在此说明一下错误发生的原因,希望对更多的人有帮助. 我们 ...

  9. C#中是否可以继承String类

    C#中是否可以继承String类? 答:String类是sealed类故不可以继承. 当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承. 在下面的示例中,类 HoverTree ...

随机推荐

  1. SQL语言基本操作(聚合函数)

    一.聚合函数 1.标量函数:只能对单个的数字或值进行计算.主要包括字符函数.日期/时间函数.数值函数和转换函数这四类.如LEFT/RIGHT/SUBSTRING/LTRIM/RTRIM/CONCAT/ ...

  2. [ACM] ZOJ Martian Addition (20进制的两个大数相加)

    Martian Addition Time Limit: 2 Seconds      Memory Limit: 65536 KB   In the 22nd Century, scientists ...

  3. python urllib2 httplib HTTPConnection

    httplib实现了HTTP和HTTPS的客户端协议,一般不直接使用,在python更高层的封装模块中(urllib,urllib2)使用了它的http实现. import httplib conn  ...

  4. localhost连接慢如何解决?

    localhost连接慢如何解决 php 环境本地用ip连接mysql响应快, 今天碰到一个连接mysql的怪问题,我在php 环境本地用ip连接mysql响应快,用localhost连接慢,后来百度 ...

  5. OpenERP函數字段的應用

    在ERP開發過程中經常會使用到某字段的值是由其他字段計算得來,並且有些還需要將計算的結果存入資料庫. 以上功能上OpenERP中是用field.function實現的 其中有種模式 a). 只計算,不 ...

  6. [Exception JavaWeb 1] - javax.el.PropertyNotFoundException: Property 'id' not found on ..........

    好久不写Web应用了,今天碰到这个问题的时候,还一时半会没反应过来.实体类在jsp无法找对应的值. 最后发现是实体bean的属性的开头字母不能与次字母不能大写+小写或小写+大写,最后改成小写+小写就好 ...

  7. Linux中more和less命令用法(转)

    一.more命令 more功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 ...

  8. potplayer 网页调用potplayer播放本地视频

      网页调用potplayer播放本地视频 CreateTime--2018年1月3日10:36:24 Author:Marydon 源码展示: <!DOCTYPE html> <h ...

  9. BerkeleyDB java的简单使用

    关于BerkeleyDB的有点和优点,列在以下 JE offers the following major features: Large database support. JE databases ...

  10. HBase权威指南 高清中文版 PDF(来自linuxidc)

      内容提要 <HBase权威指南>由乔治(Lars George)著,探讨了 如何通过使用与HBase高度集成的Hadoop将 HBase的可 伸缩性变得简单:把大型数据集分布到相对廉价 ...