news 2026/4/18 10:21:50

C++之继承与派生类的关系

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++之继承与派生类的关系

  • 子类对象会继承基类的属性的行为,任何时候子类对象都可以被当做基类类型的对象,通过子类对象可以直接访问基类中的成员,如同是基类对象在访问它们一样

向上造型和向下造型

  • 向上造型(upcast):将子类类型的指针或引用转换为基类类型的指针或引用;这种操作性缩小的类型转换,在编译器看来是安全的,可以隐式转换
  • 向下造型(downcast):将基类类型的指针或引用转换为子类类型的指针或引用;这种操作性放大的类型转换,在编译器看来是危险的,不能隐式转化,但是可以显式转换
#include<iostream>usingnamespacestd;classHuman{private:intm_private;protected:string m_name;intm_age;constint&get(void){returnm_private;}public:Human(conststring&name,intage){m_name=name;m_age=age;m_private=1234;}voideat(conststring&food){cout<<"我在吃: "<<food<<endl;}voidsleep(inthour){cout<<"我睡了"<<hour<<"小时"<<endl;}};classStudent:publicHuman{private:intm_no;//学号public:Student(conststring&name,intage,intno):Human(name,age){m_no=no;}voidwho(void){cout<<"我叫: "<<m_name<<", 今年"<<m_age<<"岁,学号是: "<<m_no<<endl;//cout << m_private << endl; //errorcout<<get()<<endl;}voidlearn(conststring&course){cout<<"我在学"<<course<<endl;}};classTeacher:publicHuman{private:intm_salary;public:Teacher(conststring&name,intage,intsalary):Human(name,age),m_salary(salary){}voidteach(conststring&course){cout<<"我正在讲 "<<course<<endl;}voidwho(void){cout<<"我叫 "<<m_name<<",今年"<<m_age<<"岁, 工资是"<<m_salary<<endl;}};intmain(void){Students("张飞",28,100011);cout<<"sizeof(s) = "<<sizeof(s)<<endl;s.who();s.eat("宫保鸡丁");s.sleep(8);s.learn("C++编程");Teachert("诸葛亮",34,200000);t.who();t.teach("嵌入式");t.sleep(7);t.eat("汉堡");// Student * -----> Human *:向上造型Human*ph=&s;ph->eat("香蕉");ph->sleep(10);//ph->who(); //error// Human * --------> Student *: 向下造型(合理)Student*ps=static_cast<Student*>(ph);ps->who();Humanh("赵云",22);//Human * -------> Student *: 向下造型 (不合理)Student*ps2=static_cast<Student*>(&h);ps2->who();return0;}

成员函数的重定义(名字隐藏)

  • 重定义: 简单的说就是子类中定义了和父类的同名函数,对父类的成员函数造成了隐藏
#include<iostream>usingnamespacestd;classBase{private:intx;public:voidset(inti){x=i;}voidprint(){cout<<"Base class "<<"x= "<<x<<endl;}};classDerived:publicBase{private:intm,n;public:voidset(intp,intk){m=p;n=k;}voidprint(){Base::print();cout<<"Derived class "<<"m = "<<m<<", n="<<n<<endl;}};intmain(void){Derived d;d.set(10,20);//d.set(100); // error 名字隐藏d.Base::set(100);d.print();return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 12:07:55

RMBG-2.0在电商设计中的落地应用:批量去除商品图背景实操案例

RMBG-2.0在电商设计中的落地应用&#xff1a;批量去除商品图背景实操案例 1. 为什么电商设计师需要RMBG-2.0这样的本地抠图工具 你有没有遇到过这些场景&#xff1a; 今天要上架30款新品&#xff0c;每张主图都需要换纯白背景&#xff0c;但PS手动抠图一上午才处理5张&#…

作者头像 李华
网站建设 2026/4/18 5:41:32

基于LangChain的Anything to RealCharacters 2.5D引擎智能提示系统

基于LangChain的Anything to RealCharacters 2.5D引擎智能提示系统 1. 当卡通立绘遇上智能提示&#xff1a;为什么需要这套系统 你有没有试过把一张二次元角色图丢进转换工具&#xff0c;结果生成的人像要么眼神空洞&#xff0c;要么皮肤质感像塑料&#xff0c;或者连发型细节…

作者头像 李华
网站建设 2026/4/18 2:44:19

零基础使用Qwen3-ASR-0.6B:本地语音识别实战指南

零基础使用Qwen3-ASR-0.6B&#xff1a;本地语音识别实战指南 1. 为什么你需要一个真正“本地”的语音识别工具 你有没有过这样的经历&#xff1a;会议刚结束&#xff0c;手边堆着一小时的录音&#xff0c;却要等半天才能导出文字稿&#xff1f;或者在整理访谈素材时&#xff…

作者头像 李华
网站建设 2026/4/18 5:44:22

美胸-年美-造相Z-Turbo技术揭秘:Transformer架构优化解析

美胸-年美-造相Z-Turbo技术揭秘&#xff1a;Transformer架构优化解析 1. 为什么Z-Turbo能在0.8秒内生成高质量图像&#xff1f; 第一次看到Z-Turbo的生成速度时&#xff0c;我下意识检查了计时器是否准确。在RTX 4090上&#xff0c;从输入提示词到512512图像完整呈现&#xf…

作者头像 李华
网站建设 2026/4/18 2:39:12

vLLM分布式推理:GLM-4-9B-Chat-1M多节点部署方案

vLLM分布式推理&#xff1a;GLM-4-9B-Chat-1M多节点部署方案 1. 为什么需要分布式推理来跑GLM-4-9B-Chat-1M GLM-4-9B-Chat-1M这个模型名字里藏着几个关键信息&#xff1a;9B参数量、支持100万上下文长度、具备网页浏览和代码执行等高级能力。但这些能力背后是实实在在的硬件…

作者头像 李华
网站建设 2026/4/11 20:14:32

小白必看:如何用Gemma-3-270m轻松生成高质量文本内容

小白必看&#xff1a;如何用Gemma-3-270m轻松生成高质量文本内容 你是不是也遇到过这些情况&#xff1a; 想写一段产品介绍&#xff0c;却卡在第一句话&#xff1b; 要整理会议纪要&#xff0c;翻着录音笔发愁怎么提炼重点&#xff1b; 给客户回邮件&#xff0c;反复删改还是觉…

作者头像 李华