C++继承与派生解析(继承、重载/转换运算符、多重继承、多态、虚函数/纯虚函数、抽象类)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: C++继承与派生解析(继承、重载/转换运算符、多重继承、多态、虚函数/纯虚函数、抽象类)

文末附有测试源码 如需自取


1:继承


是面向对象编程的三大特性之一 它使得一个类可以从另一个类中派生,减少代码量。


class 类名 : 继承方式 基类名标识符
实例如下
class rectangle :public figure

不同的继承方式那么访问基类中变量的权限也不同


子类与父类的构造函数访问顺序是:先访问父类构造函数,再访问子类构造函数


2:重载运算符


重载运算符可以将你想要的运算符重载成你想要的计算方法


语法如下


operator 类型名();
实例如下
 cbook operator+(cbook b);
return cbook(m_ipage+b.m_ipage);

此处重载了+运算符,使得两个对象可以像两个整型变量一样相加


3:转换运算符


即可以强制转换数据类型  下面将double类型强制转换为int类型


double i=52.052;
int d;
d=int(i);

4:多重继承


顾名思义,一个类可以继承多个类,但实际操作容易出问题,不建议用,主流的语言如java就不支持多继承


语法如下

class 类名:继承方式 基类名,继承方式 基类名...

5:多态


多态也是面向对象编程三大特性之一,其特点是同样的消息被不同类型对象接收时可以有不同的实现


多态主要用虚函数实现 虚函数用virtual关键字来声明 一般在基类中定义虚函数,然后在派生类中具体实现虚函数


纯虚函数 是指被表明不具体实现的虚成员函数 起到一个接口的作用


声明如下 virtual 类型 函数名(参数)=0;


纯虚函数不可以被继承,派生类必须给出基类中纯虚函数的定义


6:抽象类


包含有纯虚函数的类称为抽象类 抽象类一般只作为基类派生出其他的子类 并且不可以实例化,但是可以使用指向抽象类的指针


下面是一些测试源码 如需自取

#include<iostream>
using namespace std;
class employee {
public:
  int id;
  char name[128];
  char depart[128];
  virtual void outputname() = 0;//纯虚函数 后面有个=0
};
class copreator :public employee {
public:
  char password[128];
  void outputname() {
  cout << "操作员姓名:" << name << endl;
  }
  copreator() {
  strcpy_s(name, "玫瑰少年");
  }
};
class systemmananger :public employee {
public:
  char passwordp[128];
  void outputname()
  {
  cout << "系统管理员姓名:" << name << endl;
  }
  systemmananger() {
  strcpy_s(name, "张三");
  }
};
class figure {
public:
  virtual double getarea() = 0;//纯虚函数 不具体实现 其实现留给派生类去做 提供一个接口的作用
  //因为图形类面积计算方法不确定 所以定义为纯虚函数
};
const double pi = 3.14;
class circle :public figure {
private:
  double radius;
public:
  circle(double dr) { radius = dr; }
  double getarea() {
  return radius * radius * pi;
  }
};
class rectangle :public figure {
protected:
  double height, width;
public:
  rectangle(double dheight, double dwidth) {
  height = dheight;
  width = dwidth;
  }
  double getarea() {
  return height * width;
  }
};
int main() {
  figure* fg1;
  fg1 = new rectangle(4.3, 5.2);
  cout << fg1->getarea() << endl;
  delete fg1;
  figure* fg2;
  fg2 = new circle(4.6);
  cout << fg2->getarea() << endl;
  delete fg2;
  employee* pworker;//定义指针对象
  pworker = new copreator();//调用它的构造函数为pworker赋值
  pworker->outputname();//调用coperator类的成员函数
  delete pworker;//释放且设置为空
  pworker = NULL;
  pworker = new systemmananger();//调用另一个子类的构造函数为它赋值
  pworker->outputname();//调用这个子类的成员函数
  delete pworker;//释放且设置为空
  pworker = NULL;
  return 0;
  //同样的语句 pworker->outputname()由于pworker指向的对象不同 所以其行为也不同 这实际上就是多态
}


相关文章
|
2天前
|
编译器 C++
c++中的多态
c++中的多态
|
1月前
|
Serverless 编译器 C++
【C++面向对象——类的多态性与虚函数】计算图像面积(头歌实践教学平台习题)【合集】
本任务要求设计一个矩形类、圆形类和图形基类,计算并输出相应图形面积。相关知识点包括纯虚函数和抽象类的使用。 **目录:** - 任务描述 - 相关知识 - 纯虚函数 - 特点 - 使用场景 - 作用 - 注意事项 - 相关概念对比 - 抽象类的使用 - 定义与概念 - 使用场景 - 编程要求 - 测试说明 - 通关代码 - 测试结果 **任务概述:** 1. **图形基类(Shape)**:包含纯虚函数 `void PrintArea()`。 2. **矩形类(Rectangle)**:继承 Shape 类,重写 `Print
48 4
|
1月前
|
设计模式 IDE 编译器
【C++面向对象——类的多态性与虚函数】编写教学游戏:认识动物(头歌实践教学平台习题)【合集】
本项目旨在通过C++编程实现一个教学游戏,帮助小朋友认识动物。程序设计了一个动物园场景,包含Dog、Bird和Frog三种动物。每个动物都有move和shout行为,用于展示其特征。游戏随机挑选10个动物,前5个供学习,后5个用于测试。使用虚函数和多态实现不同动物的行为,确保代码灵活扩展。此外,通过typeid获取对象类型,并利用strstr辅助判断类型。相关头文件如&lt;string&gt;、&lt;cstdlib&gt;等确保程序正常运行。最终,根据小朋友的回答计算得分,提供互动学习体验。 - **任务描述**:编写教学游戏,随机挑选10个动物进行展示与测试。 - **类设计**:基类
32 3
|
3月前
|
存储 编译器 数据安全/隐私保护
【C++】多态
多态是面向对象编程中的重要特性,允许通过基类引用调用派生类的具体方法,实现代码的灵活性和扩展性。其核心机制包括虚函数、动态绑定及继承。通过声明虚函数并让派生类重写这些函数,可以在运行时决定具体调用哪个版本的方法。此外,多态还涉及虚函数表(vtable)的使用,其中存储了虚函数的指针,确保调用正确的实现。为了防止资源泄露,基类的析构函数应声明为虚函数。多态的底层实现涉及对象内部的虚函数表指针,指向特定于类的虚函数表,支持动态方法解析。
41 1
|
4月前
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
67 2
C++入门12——详解多态1
|
4月前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
101 1
|
3月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
131 2
|
2月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
2月前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
2月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

推荐镜像

更多