【C++】继承和多态、public、private、protected、重写

这篇具有很好参考价值的文章主要介绍了【C++】继承和多态、public、private、protected、重写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

继承与多态的概念

	面向对象三大原则:封装、继承、多态。
  • 继承是一种机制,通过它一个类可以从另一个类继承属性和方法。派生类(子类)继承基类(父类)的成员函数和数据成员,并且可以在其基础上扩展自己的成员函数和数据成员。C++支持多重继承,即一个派生类可以同时从多个基类中继承。

  • 多态是指同一种操作作用于不同的对象上面,可以有不同的解释,产生不同的执行结果。在C++中,实现多态需要借助虚函数。虚函数是在基类中声明的函数,派生类可以对其进行重写,从而实现不同的功能。当通过指向基类的指针或引用调用虚函数时,程序会根据实际指向的对象类型来调用相应的函数,这种行为称为动态绑定,即在运行时确定调用的函数。

继承与多态的区别与联系

继承是指子类从父类继承属性和方法的过程,子类可以重写(override)父类的方法,以实现自己的特定功能。继承可以简化代码,减少重复的代码量,并且可以通过继承实现代码的复用。

多态是指同一种方法在不同对象上产生不同的行为。在多态的实现中,通常采用父类指针指向子类对象的方式,这样就可以通过父类指针调用子类方法,实现不同的行为。多态可以提高代码的灵活性和可扩展性,使得程序更易于维护和扩展。

区别:

  • 继承是一种代码复用的方式,可以从父类继承属性和方法;多态则是一种代码执行的方式,同一个方法在不同对象上有不同的行为。

  • 继承是一种静态的关系,类在编译时就确定了其继承关系;多态则是一种动态的关系,运行时才能确定具体的行为。

  • 继承是一种自上而下的设计方式,父类是子类的模板;多态则是一种自下而上的设计方式,子类决定了父类的行为。

联系:

  • 继承和多态都是面向对象编程的重要概念,它们都是实现代码复用、提高代码灵活性和可扩展性的重要方式。

  • 多态需要继承作为前提,因为父类指针可以指向子类对象,才能实现多态的效果。

示例

#include <iostream>
using namespace std;

// 基类
class Shape {
   protected:
      int width, height;

   public:
      Shape( int a = 0, int b = 0) {
         width = a;
         height = b;
      }
      virtual 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++】继承和多态、public、private、protected、重写

可以看到,程序中定义了一个基类 Shape 和两个派生类 Rectangle 和 Triangle,两个派生类公有继承基类的属性和方法,并且重写了基类的虚函数 area()。在 main() 函数中,首先创建了一个指向基类的指针 shape,然后将其分别指向 Rectangle 和 Triangle 对象。最后通过指针调用虚函数。shape指针两次调用area方法,但是由于该指针指向的是不同对象,他会根据对象的类型来输出不同的结果,这就是多态

继承和访问的权限

在 C++ 中,类继承分为三种类型:public、protected 和 private。它们分别表示基类成员在派生类中的访问权限:

  • public 继承:基类中的 public 成员在派生类中仍然是 public 的,基类中的 protected 成员在派生类中仍然是 protected 的,基类中的 private 成员仍然是私有的,private成员不能被派生类访问。

  • protected 继承:基类中的 public 成员在派生类中变成 protected 的,基类中的 protected 成员在派生类中仍然是 protected 的,并且只能被他的派生类成员函数和友元函数所访问,基类中的 private 成员不能被派生类访问。

  • private 继承:基类中的 public 和 protected 成员在派生类中变成 private 的,基类中的 private 成员不能被派生类访问。

说明

class Base {
public:
    int a;
protected:
    int b;
private:
    int c;
};

class Derived1 : public Base {
    // a是public的,b是protected的,c不能访问
};

class Derived2 : protected Base {
    // a是protected的,b是protected的,c不能访问
};

class Derived3 : private Base {
    // a是private的,b是private的,c不能访问
};

示例:

#include <iostream>

using namespace std;

class Parent {
public:
    void publicMethod() {
        cout << "This is a public method of Parent class." << endl;
    }

protected:
    void protectedMethod() {
        cout << "This is a protected method of Parent class." << endl;
    }

private:
    void privateMethod() {
        cout << "This is a private method of Parent class." << endl;
    }
};

class Child : public Parent {
public:
    void callParentMethods() {
        publicMethod();     // 公有方法可以在子类中直接访问
        protectedMethod();  // 保护方法可以在子类中直接访问
        // privateMethod();    // 私有方法不能在子类中直接访问
    }
};

int main() {
    Child childObj;
    childObj.publicMethod();     // 公有方法可以在子类对象中直接访问
    // childObj.protectedMethod();  // 保护方法不能在子类对象中直接访问
    // childObj.privateMethod();    // 私有方法不能在子类对象中直接访问

    childObj.callParentMethods(); // 子类中的方法可以调用父类的公有和保护方法

    return 0;
}

在这个示例程序中,Parent类有三个成员方法,分别为publicMethod()protectedMethod()privateMethod(),它们的访问权限分别为public、protected和private。Child类继承了Parent类,并在其中定义了一个方法callParentMethods(),用于调用Parent类的publicMethod()和protectedMethod()方法。在main函数中,我们创建了一个Child类的对象childObj,并演示了不同的访问方式和权限。

结果

【C++】继承和多态、public、private、protected、重写

从这个示例程序中可以看出,public成员可以在任何地方被访问,包括在子类中和子类对象中;protected成员只能在子类和子类对象中被访问;private成员只能在类的内部被访问,包括子类中也不能访问。

**提示:**如果把继承方式改为私有继承或保护继承,那么main函数中的

childObj.publicMethod();

语句也会报错,因为保护或私有继承过来之后,公有方法的权限就变了,子类对象不能访问私有或保护的方法,那就更不能访问基类的公有方法了。

结论

【C++】继承和多态、public、private、protected、重写文章来源地址https://www.toymoban.com/news/detail-439245.html

到了这里,关于【C++】继承和多态、public、private、protected、重写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 访问修饰符private,default,protected,public访问等级区别

    private : private 是最严格的访问修饰符,它将成员声明为私有的。私有成员只能在声明它们的类内部访问,其他类无法直接访问私有成员。这样可以确保数据的封装性和安全性。 default (默认):如果没有明确指定访问修饰符,成员将具有默认的访问修饰符。默认修饰符在同

    2024年02月08日
    浏览(40)
  • 【Java】一文彻底弄懂访问修饰符(public/protected/默认/private)--建议收藏

    博主简介: 努力学习的预备程序媛一枚~ 博主主页: @是瑶瑶子啦 所属专栏: Java岛冒险记【从小白到大佬之路】  OOP(Object Oriented Programing),即面向对象编程,最重要的功能/特点之一就是 封装 ,这点在该专栏开篇博客【Java基础篇】Java重要特性,JDK,JRE,JVM区别和联系,环境变量

    2024年02月22日
    浏览(46)
  • Java当中四种权限刨析( private、default、protected、public)

    目录 一、java权限简介 二、举例使用 1.private 2.默认权限(default) 3.protected 4.public 注意        java当中有4种访问修饰限定符privat、default(默认访问权限),protected以及public。只有默认访问权限和public能够用来修饰类。修饰类的变量和方法四种权限都可以。 private:如果一个

    2024年02月06日
    浏览(41)
  • 【C++】 为什么多继承子类重写的父类的虚函数地址不同?『 多态调用汇编剖析』

    👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》 《数据结构》 《蓝桥杯试题》 《LeetCode刷题笔记》 《实训项目》 《C++》 《Linux》《算法》 🌝 每一个不曾起舞的日子,都是对生命的辜负 本篇文章主要是为了解答有关多态的那篇文章那块的一个奇怪现象,大家还记得这张

    2024年02月19日
    浏览(35)
  • python中的类class: 继承、覆盖、重写、重载、扩展、多态、封装

    使用  class  创建类。类中有方法、属性。 1.1 __init__() 函数 类的内置  __init__()  函数。所有类都有一个名为 __init__() 的函数,它在启动类时执行。 使用 __init__() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作。 每次使用类创建新对象时,都会 自动调

    2024年02月08日
    浏览(49)
  • 【C++】多态的概念和简单介绍、虚函数、虚函数重写、多态构成的条件、重载、重写、重定义

        C++中的多态是一种面向对象编程的特性, 它允许不同的对象对同一个消息做出不同的响应。 多态性能够提高代码的可复用性和灵活性,使得代码更加模块化和可扩展。    多态性是通过使用继承和虚函数实现的。 当一个类被声明为虚函数时,它可以被子类重写,并

    2024年02月13日
    浏览(43)
  • 【C++进阶】继承、多态的详解(多态篇)

    作者:爱写代码的刚子 时间:2023.8.16 前言:本篇博客主要介绍C++中多态有关的知识,是C++中的一大难点,刚子将带你深入C++多态的知识。(该博客涉及到的代码是在x86的环境下,如果是在x86_64环境下指针的大小可能需要变成8bytes) 多态的概念 多态的概念:通俗来说,就是多

    2024年02月12日
    浏览(39)
  • 【C++进阶】继承、多态的详解(继承篇)

    作者:爱写代码的刚子 时间:2023.7.28 前言:本篇博客主要介绍C++进阶部分内容——继承,C++中的继承和多态是比较复杂的,需要我们认真去深挖其中的细节。 继承的概念及定义 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序

    2024年02月13日
    浏览(37)
  • 【C++】继承和多态

    继承机制是面向对象程序设计使代码可以 复用 的最重要的手段,它允许程序员在保持原有类特性的基础上进行 扩展 ,增加功能,这样产生新的类,称 派生类/子类 。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复

    2024年02月06日
    浏览(41)
  • C++ 中的继承和多态

    继承允许我们 依据一个类来定义另一个类 ,这使得创建和维护一个应用程序变得更容易。这样做也达到了重用代码功能和提高执行效率的效果。 派生类的成员可以直接访问基类的保护成员(protected),但不能直接访问基类的私有成员(private) 。不过需要注意的是,派生类

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包