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

C++学习初探---‘C++面向对象‘-继承函数重载与运算符重载

文章目录

  • 前言
  • 继承
    • 继承是什么?
    • 三种访问权限的继承:
  • 函数重载与运算符重载
    • 函数重载
    • 运算符重载
      • 可重载运算符&不可重载运算符

前言

第三次学习记录,依旧是C++面向对象的内容。


继承

继承是什么?

C++中的继承是一种面向对象编程(OOP)的重要概念,它允许你创建一个新的类,通过继承已有的类的特性(成员变量和成员函数),从而实现代码的重用和构建层次结构。

当创建一个类时,不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类

  • 基类(也称为父类或超类):这是原始的类,它包含共享的特性和行为,通常具有更广泛的适用性。
  • 派生类(也称为子类或子类):这是从基类继承特性的新类,通常包括一些新特性或行为。

在这里插入图片描述

创建派生类,使用class关键字后跟类名。然后使用冒号指定基类。

class BaseClass {// 基类成员和方法
};class DerivedClass : public BaseClass {// 派生类成员和方法
};

一个类可以派生多个类,这意味着它可以从多个基类继承数据和函数。如下:

class Derived : public A, public B

三种访问权限的继承:

当一个类派生自基类,该基类可以被继承为 public、protectedprivate 几种类型。

  • 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有保护成员来访问。
  • 保护继承(protected): 当一个类派生自保护基类时,基类的公有保护成员将成为派生类的保护成员。
  • 私有继承(private):当一个类派生自私有基类时,基类的公有保护成员将成为派生类的私有成员。

在这里插入图片描述

实例:

#include <iostream>using namespace std;// 基类 Shape
class Shape 
{public:void setWidth(int w){width = w;}void setHeight(int h){height = h;}protected:int width;int height;
};// 基类 PaintCost
class PaintCost 
{public:int getCost(int area){return area * 70;}
};// 派生类
class Rectangle: public Shape, public PaintCost
{public:int getArea(){ return (width * height); }
};int main(void)
{Rectangle Rect;int area;Rect.setWidth(5);Rect.setHeight(7);area = Rect.getArea();// 输出对象的面积cout << "Total area: " << Rect.getArea() << endl;// 输出总花费cout << "Total paint cost: $" << Rect.getCost(area) << endl;return 0;
}


函数重载与运算符重载

C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。

函数重载

在C++中,函数重载是一种允许你为同一函数名创建多个不同版本的函数的机制。这些不同版本的函数在参数的类型、个数或顺序上有所不同,编译器会根据调用时提供的参数来确定应该调用哪个版本的函数。

特点:

  • 函数名相同,参数列表必须不同
#include <iostream>int add(int a, int b) {return a + b;
}double add(double a, double b) {return a + b;
}int add(int a, int b, int c) {return a + b + c;
}int main() {int result1 = add(5, 3);double result2 = add(2.5, 1.5);int result3 = add(1, 2, 3);std::cout << "Result 1: " << result1 << std::endl;std::cout << "Result 2: " << result2 << std::endl;std::cout << "Result 3: " << result3 << std::endl;return 0;
}

这里定义了三个相同名字的 add函数,但是形参都各不相同。

编译and执行后的结果:

Result 1: 8
Result 2: 4
Result 3: 6

注意的点:

  • 函数重载可以用于普通函数、成员函数包括类成员函数
  • 进行函数重载时,要保证函数参数列表足够不同,以便编译器能够正确地选择要调用的函数版本

运算符重载

C++中的运算符重载是一种允许你重新定义标准C++运算符的含义的机制,以便它们适用于自定义数据类型或类对象。

运算符重载的语法:要重载一个运算符,你需要在类定义中创建一个特殊的成员函数,该成员函数的名称是**operator**后跟要重载的运算符。

return_type operator op(parameters) {// 运算符的重载实现
}

重载运算符的使用:一旦你重载了一个运算符,你可以在类的对象之间使用该运算符,就像标准运算符一样。编译器会调用你重载的运算符函数来执行相应的操作。

#include <iostream>class Complex {
private:double real;double imag;public:Complex(double r, double i) : real(r), imag(i) {}Complex operator +(const Complex& other) {return Complex(real + other.real, imag + other.imag);}void display() {std::cout << real << " + " << imag << "i" << std::endl;}
};int main() {Complex a(2.0, 3.0);Complex b(1.5, 2.5);Complex c = a + b;  // 使用重载的加法运算符c.display();return 0;
}

这里就是重新声明了 + 运算符的使用,原本 加法 1+1,现在的 + 号可以 实现 “1+1,2+2”的操作。

编译and执行的结果:

3.5 + 5.5i

可重载运算符&不可重载运算符

下面是可重载的运算符列表:
在这里插入图片描述

下面是不可重载的运算符列表:

在这里插入图片描述

http://www.lryc.cn/news/213705.html

相关文章:

  • Linux下搭建SRS服务器环境
  • pytest 使用(一)
  • 基于秃鹰算法的无人机航迹规划-附代码
  • 08. 按键输入
  • YOLOv8-pose关键点检测:模型轻量化创新 |轻量高性能网络PPLCNet助力backbone
  • 大数据笔记-关于Cassandra的删除问题
  • Qt自定义文件选择框
  • 金蝶云星空创建自动下推并保存公共服务
  • 人大金仓助力中国人民银行征信中心业务系统异地容灾优化升级
  • [架构之路-249/创业之路-80]:目标系统 - 纵向分层 - 企业信息化的呈现形态:常见企业信息化软件系统 - 产品(数据)管理
  • 【NI-DAQmx入门】传感器基础知识
  • CMake:构建时为特定目标运行自定义命令
  • 基于适应度相关算法的无人机航迹规划-附代码
  • jmeter BeanShell预处理程序:报错Error invoking bsh method: eval...
  • 使用springboot对Elasticsearch 进行索引的增、删、改、查
  • Project#2: Extendible Hash Index
  • Emscripten + CMakeLists.txt 将 C++ 项目编译成 WebAssembly(.wasm)/js,并编译 Html 测试
  • MATLAB中preparets函数用法
  • ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南续篇
  • react官网
  • 前端css介绍
  • MySql创建索引
  • 前后端分离vue+springboot家庭理财账单财务管理系统
  • LeetCode:2003. 每棵子树内缺失的最小基因值(C++)
  • React Hooks之useContext使用
  • 多模态对比语言图像预训练CLIP:打破语言与视觉的界限
  • 使用s3cmd访问S3存储 -【真实案例】
  • 51单片机复位电容计算与分析(附带Proteus电路图)
  • 前端性能瓶颈崩溃项目?Webpack助力解决!
  • 纷享销客BI,助力企业激活数据价值,科学企业决策