当前位置: 首页 > news >正文

C++派生类对基类成员的访问

        派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部成员函数,但是这些成员在派生类中的访问属性在派生类的过程中是可以调整的,继承方式控制了基类中具有的不同访问属性。
        基类的成员有公有(public)、保护(protected)和私有(private)三种访问属性,类的继承方式也有公有继承(public)、保护继承(protected)和私有继承(private)三种。不同的继承方式导致具有不同访问属性的基类成员在派生类中具有新的访问属性。
        注:(1)基类中的私有成员在派生类中是隐藏的,只能在基类内部访问。
        (2)派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。此时派生类对基类中各成员的访问能力与继承方式无关,但继承方式将影响基类成员在派生类中的访问控制属性,基类中公有成员和保护成员在派生类中的访问控制属性将随着继承方式而改变:①派生类从基类私有继承时,基类的公有成员保护成员在派生类中仍是公有成员;②派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都改变为私有成员;③派生类从基类保护继承时,基类的公有成员在派生类中改变为保护成员,基类的保护成员在派生类中仍为保护成员。
        例1        分析下列程序是否正确

#include<iostream>
using namespace std;
class Point
{
private:int x, y;
public:void InPoint(int x, int y) { this->x = x; this->y = y; }void Move(int x, int y) { this->x += x; this->y += y; }int  Getx() { return x; }int Gety() { return y; }
};
class Rectangle :public Point
{
private:int w, h;
public:void InRectangle(int x, int y, int w, int h) { InPoint(x, y); this->w = w; this->h = h; }int Getw() { return w; }int Geth() { return h; }
};
int main()
{Rectangle r;r.InRectangle(2, 3, 10, 20);r.Move(3, 2);cout << r.Getx() << "." << r.Gety() << "." << r.Getw() << "." << r.Geth() << endl;return 0;
}

        程序运行正确。
        派生类虽然无法直接调用基类的私有成员但可以间接调用。 
        例2        分析下列程序是否正确

#include<iostream>
using namespace std;
class Base
{
protected:int data;
};
class Dervied :public Base
{
public:void fun() { data = 1; }
};
int main()
{Base objb;Dervied objd;objb.data = 2;objd.fun();return 0;
}

        在这里会报错。因为data是保护成员无法直接访问。但在派生类中可以访问公有成员和私有成员。

 

参考《全国计算机等级考试二级教程——C++语言程序设计》

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [Linux安全运维] OpenVPN部署
  • 吴恩达大模型LLM系列课程学习(更新42门课程)
  • 初步认识HTML
  • 【视频讲解】神经网络、Lasso回归、线性回归、随机森林、ARIMA股票价格时间序列预测|附代码数据
  • python3.11SSL: SSLV3_ALERT_HANDSHAKE_FAILURE
  • 搭建个人智能家居 7 - 空气颗粒物检测
  • 【.NET全栈】ASP.NET开发Web应用——站点导航技术
  • 操作系统发展简史(Unix/Linux 篇 + DOS/Windows 篇)+ Mac 与 Microsoft 之风云争霸
  • 【BUG】已解决:raise KeyError(key) from err KeyError: (‘name‘, ‘age‘)
  • 学习SQL权限管理的基础知识
  • 查询优化 -- UNION 用法
  • 路由数据获取及封装方法
  • 数据结构(Java):力扣牛客 二叉树面试OJ题(一)
  • FFmpeg学习(五)-- libswresample使用说明及函数介绍
  • C# 4.List
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【Leetcode】104. 二叉树的最大深度
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • in typeof instanceof ===这些运算符有什么作用
  • JS实现简单的MVC模式开发小游戏
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Sass 快速入门教程
  • Spark学习笔记之相关记录
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 从零搭建Koa2 Server
  • 强力优化Rancher k8s中国区的使用体验
  • 双管齐下,VMware的容器新战略
  • 应用生命周期终极 DevOps 工具包
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • Java数据解析之JSON
  • ​520就是要宠粉,你的心头书我买单
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • # centos7下FFmpeg环境部署记录
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (21)起落架/可伸缩相机支架
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (js)循环条件满足时终止循环
  • (动态规划)5. 最长回文子串 java解决
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (转)scrum常见工具列表
  • *2 echo、printf、mkdir命令的应用
  • .bat文件调用java类的main方法
  • .gitattributes 文件
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET6 命令行启动及发布单个Exe文件