基类对象与派生类对象的关系

关于基类与派生类之间对象、指针等转化关系的小结 先上一段代码: #include using namespace std; //没有使用虚函数的继承派生关系 class Base { public: Base(int i = 0):ival(i){} void getVal() { cout<<ival<<endl; } private: int ival; }; class Derived:public Base { 阅读详情

基类对象与派生类对象的使用关系



1. 派生类对象作为基类对象处理
由于派生类具有所有基类的成员,所以把派生类的对象赋给基类对象是合理的,不过要求这种继承方式必须是public方式。但是,反过来赋值会使基类中一具有派生类的成员(因为派生类的成员通常是比基类的成员多),所以这是不允许的。
2. 基类指针指向派生类对象
因为派生类对象也是基类对象,所以指向派生类对象的指针可以转换为指向基类对象的指针,这种引用方式是安全的,但是用这种方式只能引用基类成员。如果试图通过基类指针引用那些只有在派生类中才有的成员,编译系统会报告错误。
#include<iostream.h>
#include<string.h>
class Stud
{
char name[10];
int score;
public:
Stud(char na[],int s)
{
strcpy(name,na);
score=s;
}
void disp()
{
cout<<name<<" "<<score<<" ";
if(score>=90)
cout<<"优"<<endl;
else if(score>=80)
cout<<"良"<<endl;
else if(score>=70)
cout<<"中"<<endl;
else if(score>=60)
cout<<"及格"<<endl;
else
cout<<"不及格"<<endl;
}
};


class Unstud:public Stud
{
char cname[10];
public:
Unstud(char na[],char cn[],int s):Stud(na,s)
{
strcpy(cname,cn);
}
};


class Grstud:public Stud
{
char research[10];
public:
Grstud(char na[],char rs[],int s):Stud(na,s)
{
strcpy(research,rs);
}
};


int main()
{
Stud *p;
Unstud st1("李明","计科02",85);
Grstud st2("王华","数据挖掘",92);
p=dynamic_cast<Stud *>(&st1);
p->disp();
p=dynamic_cast<Stud *>(&st2);
p->disp();
}


3. 派生类指针强制指向基类对象
直接用派生类指针指向基类的对象,这种方式会导致语法错误。但可以将派生类强制转换为基类指针,然后就可以调用基类的成员了。这种强制转换使用的静态转型运算符,其使用格式如下:
派生类对象指针=static_cast<派生类*>(&基类对象);





看了这个  还是有点不太明白为什么派生类对象可以访问基类成员这句话是错的

基类与派生类对象之间的赋值兼容关系(C++ 学习笔记 35)   不同类型的数据之间的自动转换和赋值,称为赋值兼容。   在基类和派生类对象之间也存在有赋值兼容关系,基类和派生类对象之间的 赋值兼容规则 是指在需要基类对象的任何地方,都可以使用 公有派生类的对象 来替代。     通过公有继承,派生类保留了基类中除构造函数、析构函数之外的所有成员,基类的公有或保护成员的访问权限在派生类中全部原样保留了下来,在派生类外可以调用基类的公有成员函数访问基类的私有... 阅读详情

相关推荐

Ubuntu22.04+Docker一键部署Autoware Universe避坑指南(附鱼香ROS配置)

本文详细介绍了在Ubuntu22.04系统中使用Docker一键部署Autoware Universe的完整流程,包括鱼香ROS工具链配置、Docker环境优化及VSCode开发环境集成。通过实战指南帮助开发者快速搭建自动驾驶开发环境,解决常见部署问题,提升开发效率。

weixin_29254673的博客 416

基类对象与派生类对象的使用关系

基类对象与派生类对象的使用关系 1. 派生类对象作为基类对象处理 由于派生类具有所有基类的成员,所以把派生类的对赋给基类对象是合理的,不过要求这种继承方式必须是public方式。但是,反过来赋值会使基类中一具有派生类的成员(因为派生类的成员通常是比基类的成员多),所以这是不允许的。 2. 基类指针指向派生类对象 因为派生类对象也是基类对象,所以指向派生类对象的指针可以转换为指向基类

hustyangju的足迹 7937

卡方分布的前世今生:一个统计概念的演化史

本文追溯了卡方分布从19世纪末的理论雏形到现代统计推断核心工具的发展历程。从Karl Pearson的数学奠基到Ronald Fisher的理论完善,卡方分布在医学研究、社会科学和机器学习等领域展现出广泛应用。文章通过代码示例和性质分析,揭示了这一统计概念如何持续推动数据科学创新。

weixin_29251567的博客 391

[ C++ ] 继承

面向对象编程的主要目的之一是提供可重用的代码,C++提供了一个方法来扩展和修改类。这种方法叫做类继承。它能够从已有的类派生出新的类,而派生类继承了原有类(称为基类)的特征,包括方法。

优快云博客 1228

AI报告撰写实战指南:从提示词工程到全流程优化的底层逻辑与实践突破

传统AI写作常被诟病为“信息拼贴”——模型虽能生成文本,却常出现逻辑断裂、数据矛盾、风格不符等问题。而“全流程优化”则是通过系统化设计,将报告生成拆解为需求解析→数据对齐→提示词设计→初稿生成→迭代优化→格式适配六大环节,每个环节均通过技术手段提升输出质量。提示词工程:本质是通过结构化指令(如角色设定、任务分解、格式约束、示例引导)精准控制模型输出方向,是连接用户需求与模型能力的“翻译器”。全流程优化。

2501_92808811的博客 885

人形机器人专题:人形机器人关节,从Optimus选型看关节的发展

今天分享的是深度研究报告:《(报告出品方:中泰页。

GPT20236688的博客 3226

C++基础15---基类对象模型与派生类对象模型探索

1. 派生类对象模型 1.1 派生类对象的组成部分 派生类对象包含多个组成部分,包括: (1)派生类自己定义的子对象(成员变量、成员函数)。 (2)派生类从基类继承得到的子对象(基类中定义的成员变量、成员函数)。 1.2 基类指针与派生类指针 由于子类对象中包含父类的对象,因此,子类的指针范围大于父类指针范围。所以,可以用父类指针指向子类对象,而子类指针无法指向父类对象。 #include <iostream> using namespace std; class Animal { };

weixin_42454048的博客 719

大数据工程中的多模态数据处理技术

模态”(Modality)指的是数据的表现形式文本(Text):新闻、评论、文案等;图像(Image):照片、截图、医学影像等;音频(Audio):语音、音乐、环境声音等;视频(Video):短视频、监控视频、电影等(本质是图像+音频的组合);数值/结构化数据(Numerical/Structured):用户年龄、商品价格、传感器数据等;时间序列(Time Series):股票价格、物流轨迹、心率数据等。多模态数据(Multimodal Data)是指包含两种或以上模态的数据集。

AI云原生与云计算技术学院 1274

派生类和基类的关系

派生类和基类的关系C++一个主要目标是提供代码重用,类继承是实现该目标的重要途径之一。从一个类派生出另一个类时,原始类称为基类,继承类称为派生类。 派生类和基类的关系: 1. 派生类对象存储了基类的数据成员 2. 派生类对象可以使用基类的方法 如下例:“` class BaseClass { private: int data1;

white__bear的博客 1万+

OpenClaw零基础教程:30分钟搭建你的第一个AI自动化助手

别再看那些满是代码、专业术语的教程了,那些都是给程序员看的。这篇教程,我把所有步骤拆到了极致,你跟着点鼠标就行,点错了都没关系,大不了重装一遍,5分钟的事。

2601_94871597的博客 97

YOLOv5 实现 10 种热力图可视化方式教程 | GradCAM XGradCAM ScoreCAM LayerCAM HiResCAM EigenCAM....

基于梯度计算类激活图,是最经典的热力图生成方法之一。Grad-CAM的改进版,通过引入梯度加权的方式,提高了热力图的定位精度。基于类别的得分计算类激活图,对噪声具有更强的鲁棒性。基于特定层的特征图计算类激活图,可以灵活选择不同的层进行分析。通过上采样将低分辨率的特征图恢复到原始图像大小,提高了热力图的分辨率。基于特征图的特征向量进行PCA降维,得到更简洁的热力图。对Grad-CAM的进一步改进,通过加权平均的方式,提高了热力图的质量。基于积分梯度的方法,可以解释模型对输入的每个特征的贡献。

weixin_39818775的博客 2374

C++基类指针或引用指向或引用派生类对象(实现动态多态四种手段)父类指针访问子类成员变量(需要dynamic_cast)

因此,p1->speak()会调用Cat类中的speak函数,输出"Cat speaks",p2->speak()会调用Dog类中的speak函数,输出"Dog speaks"。在main函数中,我们使用Animal指针p指向Cat对象,然后使用dynamic_cast运算符将p转换为Cat指针q,从而访问Cat类中的name成员变量。如果我们不使用父类指针指向子类对象,而是直接使用Cat和Dog对象,那么我们就需要分别调用它们的speak函数,这样会导致代码的重复和冗余,不利于代码的扩展和维护。

Dontla的博客 4366

由ip地址和子网掩码求网络号、主机号、广播地址(超详细)

1、用二进制数表示IP地址   在进行计算之前,我们首先要学会十进制的IP地址怎么转换为二进制的IP地址。   给出一个例子: 十进制:172.16.25.3 二进制:10101100.00010000.00011001.00000011 1、如果两台主机的网络号相同,我们就说它们是同一网段 2、主机号的意义 - 1)主机号部分全变成1,即为该网段的广播地址 - 2)主机号部分全变成0,即为该网段的网路地址(网络号) 3、如果主机号部分为x位,则该网络能容纳最大主机数为: 2的x次方-2。减2

爱吃雪糕的小布丁的博客 9万+

基类与派生类对象的关系 派生类的构造函数

C++中的基类与派生类对象的关系 派生类的构造函数

一怀明月的博客 1233

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++:基类与派生类对象之间的赋值兼容关系

4.5 基类与派生类对象之间的赋值兼容关系 在一定条件下,不同类型的数据之间可以进行类型转换,例如可以将整型数据赋给双精度型变量。 在赋值之前,先把整型数据转换为双精度型数据,然后再把它双精度型变量。这种不同类型之间的自动转换,称为赋值兼容。在基类和派生类对象之间也存在有赋值兼容关系,基类和派生类对象之间的赋值兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来代替。因为,...

dienangpiao2051的博客 911

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【C++】4.5 基类与派生类对象之间的赋值兼容关系

4.5 基类与派生类对象之间的赋值兼容关系 【定义】不同类型数据之间的自动转换和赋值,称之为赋值兼容 【基类与派生类对象之间的赋值兼容关系】需要基类对象的任何地方,都可以使用公有派生类对象替代。 【替代的四种情况】 说明:Base为基类,Derived为公有派生类 (1)派生类对象可以向基类对象赋值 Base b; Derived d; b=d; //用派生类对象d对基类对象b...

Alvin的博客 1145

基类与派生类对象的关系

•基类对象与派生类对象之间存在赋值相容性。包括以下几种情况: –把派生类对象赋值给基类对象。 –把派生类对象的地址赋值给基类指针。 –用派生类对象初始化基类对象的引用。 •反之则不行,即不能把基类对象赋值给派生类对象;不能把基类对象的地址赋值给派生类对象的指针;也不能把基类对象作为派生对象的引用。  #include using namespace std; cla

little博客 5807

C++-继承:基类与派生类对象的关系&&继承与组合

1、基类与派生类对象的关系在继承方式下,派生类获得了基类成员的一份拷贝,这份拷贝构成了派生类对象内部的一个基类子对象。也就是说,在派生类对象中存在一个基类子对象。因为这个原因,基类对象与派生类对象之间存在赋值相容性。赋值相容是指在公有派生方式下,凡是需要基类对象的地方都可以使用派生类对象基类对象能够解决的问题,用派生类对象也能够解决,有以下几种情况:1、把派生类对象赋值给基类对象 2、把派生类对象

可可西里 1550

C++基类对象与派生类对象的初始化关系

C++基类对象与派生类对象的初始化关系

qq_65040289的博客 746

基类指针指向派生类对象

派生类对象也“是”基类对象,但两者不同。 派生类对象可以当做基类对象,这是因为派生类包含基类的所有成员。 但是基类对象无法被当做成派生类对象,因为派生类可能具有只有派生类才有的成员。 所以,将派生类指针指向基类对象的时候要进行显示的强制转换,否则会使基类对象中的派生类成员成为未定义的。 总结:基类指针和派生类指针指向基类对象和派生类对象的4中方法: 1.基类指针指向基类对象...

aoshunjian2584的博客 220

关于基类和派生类之间的关系

作为面向对象的程序设计来说,继承是非常重要的一个特点,面向对象程序设计(Object-Oriented Programming, OOP)的核心思想是数据抽象、继承和动态绑定。其中使用数据抽象,我们可以将类的接口与实现分离;使用继承,可以定义相似的类型并对其相似关系建模;使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象。下面什么主要介绍的是继承中基类和派生类...

weixin_30352645的博客 853
上一篇: 常量对象与常量成员函数
下一篇: 虚基的例子
KLFTESPACE
博客等级 码龄9年 66粉丝 655原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值