美文网首页
掌握C++继承和重载概念

掌握C++继承和重载概念

作者: 向往文艺的工科男 | 来源:发表于2019-08-05 13:56 被阅读0次

C++ 继承

面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行时间的效果。

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

继承代表了 is a 关系。例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。

基类 & 派生类

一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。定义一个派生类,我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名,形式如下:

class derived-class: access-specifier base-class

其中,访问修饰符 access-specifier 是 public、protected 或 private 其中的一个,base-class 是之前定义过的某个类的名称。如果未使用访问修饰符 access-specifier,则默认为 private。

假设有一个基类 ShapeRectangle 是它的派生类,如下所示:

实例


#include <iostream> using namespace std;

// 基类class Shape {  public:

      void setWidth(int w)      {        width = w;

      }      void setHeight(int h)      {        height = h;

      }  protected:

      int width;

      int height;};

// 派生类class Rectangle: public Shape{  public:

      int getArea()      {

        return (width * height);

      }};

int main(void){  Rectangle Rect;

  Rect.setWidth(5);

  Rect.setHeight(7);

  // 输出对象的面积  cout << "Total area: " << Rect.getArea() << endl;

  return 0;}


当上面的代码被编译和执行时,它会产生下列结果:

Total area: 35

C++ 重载运算符和重载函数

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

重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。

当您调用一个重载函数重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策

C++ 中的函数重载

例如根据参数类型选择不同的函数处理方式。

重载运算符

重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。

Box operator+(const Box&);

声明加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。大多数的重载运算符可被定义为普通的非成员函数或者被定义为类成员函数。如果我们定义上面的函数为类的非成员函数,那么我们需要为每次操作传递两个参数,如下所示:

Box operator+(const Box&, const Box&);

C++ 多态

多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。

C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。

下面的实例中,基类 Shape 被派生为两个类,如下所示:实例

#include <iostream> using namespace std;

class Shape {  protected:

      int width, height;

  public:

      Shape( int a=0, int b=0)      {       

 width = a;

        height = b;

      }      int area()      {        cout << "Parent class area :" <<endl;

        return 0;

      }};

class Rectangle: public Shape{  public:

      Rectangle( int a=0, int b=0):Shape(a, b) { }      int area ()      {

        cout << "Rectangle class area :" <<endl;

        return (width * height);

      }};

class Triangle: public Shape{  public:

      Triangle( int a=0, int b=0):Shape(a, b) { }      int area ()      {

        cout << "Triangle class area :" <<endl;

        return (width * height / 2);

      }};// 程序的主函数,创建对象,使用指针访问对象的属性。

int main( ){  Shape *shape;

  Rectangle rec(10,7);

  Triangle  tri(10,5);

  // 存储矩形的地址  shape = &rec;

  // 调用矩形的求面积函数 area  shape->area();

  // 存储三角形的地址  shape = &tri;

  // 调用三角形的求面积函数 area  shape->area();

  return 0;}

相关文章

  • 掌握C++继承和重载概念

    C++继承 面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应...

  • C++之重定义、重载与重写

    想要用好C++继承和类自身函数实现就必须了解C++得三个概念重定义(redefine)、重载(overload)、...

  • pybind11—类(继承,重载,枚举)

    前言 在C++类中, 继承, 函数重载是重要的特征。 继承 重载 overloadpy::overload_cas...

  • 2020-07-06----《C++类的学习》

    函数重载:同名不同参。 C++类的特点:封装、继承、多态。 //多态与函数重载是啥关系? 虚函数:和软件架构相关 ...

  • C++的继承,重载,隐藏,覆盖

    [TOC] 继承,重载的概念对于一位C++程序员来说就是轻车驾熟,而隐藏和覆盖也并不陌生。但是,当我们写了一个自认...

  • 2.C++对C的扩展

    重载(overload) C++中,引用了函数重载的概念,函数名同名,参数列表不同形成重载。重载规则: 函数名相同...

  • 运算符重载

    一、运算符重载的概念 重载运算符的概念 C++中的表达式由运算符和操作数按照规则构成。 运算符重载就是给已有的运算...

  • 第十一章 使用类

    运算符重载 运算符重载是一种形式的C++多态。运算符重载将重载的概念扩展到运算符上,允许赋予C++运算符多种含义。...

  • 清华毕业扫地僧,深入讲解Java基础+高级进阶300集,总计15

    前言 Java继承了C++语言面向对象技术的核心,又舍弃了C++语言中的指针、运算符重载以及多重继承的特性,同时引...

  • c++重载、覆盖、隐藏的区别

    c++重载、覆盖、隐藏的区别 既然说到了继承的问题,那么不妨讨论一下经常提到的重载,覆盖和隐藏 4.1成员函数被重...

网友评论

      本文标题:掌握C++继承和重载概念

      本文链接:https://www.haomeiwen.com/subject/etqmdctx.html