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

C++ 继承(1)

1.1定义

1.1引入

从生活中举个例子,继承可以是儿子继承父亲的家业,这就使得儿子可以不用花费任何努力就得到一些东西。C++中也是一样,子类(又叫派生类)可以继承父类(又叫基类)的成员(其中包括成员变量和成员函数)

本质:复用(之前学过下面这些,大都是函数的复用,继承可以理解为类的复用)

  1. 函数调用(直接调用已定义的函数,这是最基本的复用方式
  2. 函数重载(通过定义参数列表不同的同名函数,实现相似功能的复用
  3. 函数模板(使用泛型编程实现通用函数,适配不同数据类型
  4. 内联函数(在编译时将函数代码嵌入调用处,避免函数调用开销的同时实现复用
  5. 库函数(使用标准库或自定义库中已实现的函数

1.2格式

如上述代码所示,Student类继承Person类
class Student(子类):public(继承方式) Person(父类) 

class Person
{
public:void Print(){cout << "name:" << _name << endl;cout << "age_" << _age << endl;}
protected:string _name = "Peter";int _age = 18;};
class Student :public Person
{
protected:int _stuid;
};

1.3继承基类成员访问方式的变化

  • 父类的私有成员在子类中无论以什么样的继承方式均不可见(父类的私有成员还是被继承到了派生类对象中,是存在的,但是语法上限制在类内外均无法访问=》但是可以间接访问哦后面讲
  • 父类中的protected:保证了父类成员不想再类外被访问,但是可以在子类访问。
  • 使用关键字class时,默认的继承方式是private;使用关键字struct时,默认public;
  • protected的只能在子类中访问,不能在其他类中访问

2.赋值兼容转换

子类对象可以赋值给父类的对象,父类指针,父类的引用(但是父类对象不能赋值给子类对象)

class Person
{
protected:string _name;string _sex;int _age;
};
class Student :public Person
{
public:int _No;
};
void Test()
{Student sobj;Person pobj=sobj;//子类对象赋值给父类对象Person* pp = &sobj;//子类对象赋值给父类指针Person& rp = sobj;//子类对象赋值给父类引用//错误,基类对象不能赋值给派生类对象sobj = pobj;//3.基类的指针可以通过强致类型转换赋值给派生类的指针pp = &sobj;Student* ps1 = (Student*)pp;ps1->_No = 10;pp = &pobj;Student* ps2 = (Student*)pp;//可以,但是可能会越界访问ps2->_No = 20;}

3.继承中的作用域

3.1关于隐藏、重定义

隐藏、重定义:子类和父类中有同名成员,子类成员将屏蔽父类成员的直接访问,(在子类成员函数中,可以使用基类::基类成员显示访问

3.2一个易错点

class A {
public:void Fun(){cout << "Fun()" << endl;}
};
class B:public A
{
public:void Fun(int i){A::Fun();cout << "Fun(int i)->" <<i<< endl;}
};
void Test()
{B b;b.Fun(10);
}
int main()
{Test();return 0;
}

执行结果:

那么,问题,A类中的Fun()和B类中的Fun(i)是否构成函数重载呢

不构成,因为他们不是同一作用域

他们俩构成隐藏,成员函数满足函数名相同就构成隐藏

http://www.dtcms.com/a/491226.html

相关文章:

  • uniapp——配置鸿蒙环境,进行真机调试
  • 鸿蒙仓颉:如何自定义带Tag的日志打印信息
  • 带你了解STM32:RTC实时时钟(第一部分)
  • 前端 JavaScript 面试题大全(含答案及解析)
  • 网站页面设计报告wordpress 门户插件
  • 国外营销型网站建设容城网站建设
  • 将.idea取消git托管
  • YOLOv1和YOLOv2目标检测算法总结
  • 系统移植篇之uboot-4:UART
  • net和cn哪个做网站好wordpress企业主题 视频
  • 石家庄网站排名优化360网站建设服务
  • 苍穹外卖-购物车 前端修改(小程序主页与购物车模块显示不一致)
  • 聊聊 Unity(小白专享、C# 小程序 之 小算盘、计算器)
  • 江苏金安建设公司网站在线设计平台官网
  • 专业网站建设公司哪里济南兴田德润什么活动电子商务网站的整个建设流程
  • 【2025年湖南省赛misc复盘】
  • 北京建设教育协会官方网站做产品推广得网站
  • 牙刮匙与牙周治疗疗效的相关性分析
  • 三星XR头显发布会正式敲定,苹果/Meta/微美全息竞逐AR底层核心卡位“军备竞赛”
  • 【C++进阶系列】:类型转换和IO流
  • 卡板技术支持 东莞网站建设动态设计是什么意思
  • 宠物服务平台(程序+文档)
  • Maven再次认识
  • 【STM32项目开源】基于STM32的智能厨房环境监控系统
  • 策略模式详情
  • 省级网站 开发建设 资质企业员工培训课程
  • VS Code settings.json配置(终端篇)
  • 好看的静态网站网页制作设计教程
  • Spring Boot API文档与自动化测试详解
  • 哈尔滨龙彩做网站多少钱做网站怎么样引流