C++ 面向对象(2)——继承

news/2024/11/30 20:29:37/

C++ 继承

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

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

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

代码如下:

// 基类
class Animal {
    // eat() 函数
    // sleep() 函数
};


//派生类
class Dog : public Animal {
    // bark() 函数
};

基类 & 派生类

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

class derived-class: access-specifier base-class

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

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

实例

 

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

Total area: 35

访问控制和继承

派生类可以访问基类中所有的非私有成员。因此基类成员如果不想被派生类的成员函数访问,则应在基类中声明为 private。

我们可以根据访问权限总结出不同的访问类型,如下所示:

访问publicprotectedprivate
同一个类yesyesyes
派生类yesyesno
外部的类yesnono

一个派生类继承了所有的基类方法,但下列情况除外:

  • 基类的构造函数、析构函数和拷贝构造函数。
  • 基类的重载运算符。
  • 基类的友元函数。

继承类型

当一个类派生自基类,该基类可以被继承为 public、protected 或 private 几种类型。继承类型是通过上面讲解的访问修饰符 access-specifier 来指定的。

我们几乎不使用 protected 或 private 继承,通常使用 public 继承。当使用不同类型的继承时,遵循以下几个规则:

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

多继承

多继承即一个子类可以有多个父类,它继承了多个父类的特性。

C++ 类可以从多个类继承成员,语法如下:

class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};

其中,访问修饰符继承方式是 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;

}

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

Total area: 35
Total paint cost: $2450

 


http://www.ppmy.cn/news/535400.html

相关文章

flume数据流监控

Ganglia 的部署与安装 Ganglia 由 gmond、gmetad 和 gweb 三部分组成。 gmond&#xff1a;Ganglia 监听守护进程&#xff0c;负责收集本地节点的系统信息&#xff0c;并将其发送到 gmetad 或其他 gmond 节点。&#xff08;每个节点安装&#xff09;gmetad&#xff1a;Ganglia…

网站服务器被攻击怎么办?找甜甜了解高防CDN,告诉您哪家防御效果极佳

在互联网飞速发展的时代&#xff0c;网站被攻击事件层出不穷&#xff0c;高防CDN&#xff0c;在不同的攻击类型上&#xff0c;部署了针对不同攻击的防御策略&#xff0c;以此保证网站的正常运行&#xff0c;同时通过智能化的网络系统将用户分配至最近的优质的节点上去接待访问的…

云服务器被ddos攻击了怎么办?甜甜来给您解答

随着互联网科技的发展&#xff0c;网络安全问题日益突出&#xff0c;企业服务器被攻击的事件也越来越频繁。为此快快推出的增值服务高防ip&#xff0c;有效解决了中小企业DDOS攻击问题&#xff0c;同时快快高防ip支持大流量按天付费模式&#xff0c;可按不同业务需求配置弹性防…

丹东dns服务器位置,丹东移动dns服务器地址

丹东移动dns服务器地址 内容精选 换一换 当您想在Internet上通过域名访问您的网站时&#xff0c;可以通过本操作将域名托管至华为云的云解析服务&#xff0c;并为域名添加解析记录。例如&#xff0c;搭建一个网站服务器&#xff0c;采用IPv4格式的弹性IP地址。如果想要实现通过…

企业防病毒服务器部署介绍

企业采用防病毒软件是服务器版的,可以对服务器和客户端操作系统进行防病毒保护,基于对病毒的防范,要求企业级防病毒软件可以定期更新病毒代码,监控系统进程,查杀病毒,将病毒扫描结果汇总出报告,从而确保企业IT环境的安全可靠。在实际的IT运维过程中,用户遇到多数病毒是…

Linux服务器安装杀毒软件ClamAV

1 ClamAV介绍 ClamAV是Linux操作系统一款免费的杀毒工具&#xff0c;通过命令执行病毒库升级、查找病毒和删除病毒。 官方参考文档&#xff1a;Installing - ClamAV Documentation 官方下载地址&#xff1a;https://www.clamav.net/downloads 2 安装ClamAV 在CentOS操作系…

无视CC,DDOS,国内服务器租用,屏蔽海外流量

往我们体验一款游戏或者访问一个网站时&#xff0c;都是看它的网络速度与稳定情况。如果打游戏出现网卡&#xff0c;闪退&#xff0c;或者访问网站时访问速度慢或者打不开网页&#xff0c;那么&#xff0c;我们肯定会选择直接退出&#xff0c;不会再访问第二次。但如果遇到有一…

Linux下安装开源杀毒软件ClamAV对服务器进行查杀

1、安装epel源&#xff0c;在命令行下执行yum install epel-release –y&#xff0c;如下图&#xff1a; 2、在安装了EPEL源后&#xff0c;运行下面的命令安装ClamAV&#xff0c;在命令行下执行yum install clamav-server clamav-data clamav-update clamav-filesystem clamav …