21天学通C++之--继承实战练习

本文介绍了C++中的继承与派生概念,阐述了继承的作用,如减少代码冗余,增强代码复用性,以及派生类的声明格式。通过实际的题目,展示了继承在实际编程中的应用。
摘要由CSDN通过智能技术生成

继承与派生的概念

  • 继承所表达的是对象类之间的一种关系。它使得某类对象可以继承另外一类对象的特征和能力。
  • 继承使得程序员对共同的属性及操作只需说明一次,减少了相似类的重复说明,并且在具体情况下可以扩展和细化 这些属性及操作。
    保持已有类的特性而构造新类的过程称为继承。
  • 在已有类的基础上新增自己的特性而产生新类的过程称为派生。
  • 被继承的已有类称为基类(或父类)。
  • 派生出的新类称为派生类 (或子类)。

继承的作用

在面向对象系统中,引入继承机制后具有的作用:
能减少代码和数据的重复冗余度,大大增加程序代码的复用性;
能清晰体现相关类间的层次结构关系;
对多个概念进行组合。

声明派生类

声明派生类的一般格式为:
class 派生类名: 继承方式 基类名
{
// 派生类新增的数据成员和成员函数
……
};
其中“基类名”是一个已经定义的类的名称,“派生类名”是继承原有类的特性而生成的新类的名称。
“继承方式”表示如何访问从基类继承的成员,它可以是关键字private、protected和public,分别表示私有继承、保护继承和公有继承。由类Person派生出类Student可以采用后面三种格式


具体的对于继承其他知识:

函数重写,虚函数,抽象对象,动态绑定与静态绑定的知识就不写在这里了。


接下来直接贴题目和代码:

题目一

//
//  main.cpp
//  CppCP7_1
//
//  Created by Chenjun Xiong on 27/04/2017.
//  Copyright © 2017 Chenjun Xiong. All rights reserved.
//
//利用虚函数求面积
//
//题目描述
//定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle( 长方形)、和Triangle (三角形),用虚函数分别计算面积。
//编写求面积和函数TotalArea (vector <Shape * >),该函数利用基类指针向量,它的每一个元素指向一个派生类的图形对象。
//编写测试解释器,读入各种图形信息,生成各种图形对象,由vector<Shape * > 管理。
//利用求面积虚函数,输出面积总和,要求正确释放空间。PI取3.1416
//
//输入描述
//circle 后跟半径
//rectangle后跟长和宽
//triangle后跟三条边
//
//输出描述
//结果保留小数点后4位
//
//输入样例
//circle  5.2 circle  6.0
//rectangle  3.4 2
//triangle  3 4 5
//rectangle  4.4 10
//
//输出样例
//254.8465

#include <iostream>
#include <math.h>
#include <vector>
#include <string.h>
#include <iomanip>
#define PI 3.1416;

using namespace std;
//below is shape class
class Shape{
protected:
    double area;
public:
    Shape(){area=-1;};
    virtual double CalArea(){
  return area;};
    double static TotalArea(vector <Shape*> &vecShapes);
    void static DeleteAllShapes(vector <Shape*> &vecShapes);
    virtual ~Shape(){};
};

double Shape::TotalArea(vector <Shape*> &vecShapes){
    double TotalArea=0;
    for(int index=0;index<vecShapes.size();index++){
        TotalArea+=vecShapes[index]->CalArea();
    }
    return TotalArea;
}

void Shape::DeleteAllShapes(vector <Shape*> &vecShapes){
    for(int index=0;index<vecShapes.size();index++){
        if(vecShapes[index])
            delete vecShapes[index];
    }
    while(vecShapes.size()>0){
        v
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值