首页 > 编程语言 >2024 4 7 c++ 作业多态性

2024 4 7 c++ 作业多态性

时间:2024-04-07 19:34:20浏览次数:24  
标签:const 函数 int 多态性 c++ 2024 override 派生类 CShape

1. 多态性:抽象类和派生类

(1) 定义一个抽象类CShape (至少有一个函数被声明为纯虚函数);

(2) 再利用CShape分别定义两个派生类CRectangle(矩形)和CCircle(圆), 三个类都有计算面积的成员函数GetArea()和计算对象周长的成员函数GetPerimeter() ;

(3) 在主函数中声明基类指针和派生类对象,并通过基类指针调用不同对象的成员函数GetArea() 和GetPerimeter()。

问题1:什么是纯虚函数

解决:纯虚函数的主要作用是定义一个接口,强制派生类提供特定的实现。给派生的基类提供一个特殊的接口来实现多态性。eg.

// 抽象基类

class Shape {

public:

// 纯虚函数 virtual void draw() const = 0;

// 虚析构函数 virtual ~Shape() {} };

问题2:子类中的函数定义

解决:eg:void draw() const override { std::cout << "绘制一个矩形" << std::endl;

override的意思是告诉编译器是从基类的虚函数继承下来的重写版本。

问题3: void  GetArea(int l,int w)  override{
               int area=0;
               length=l;
               width=w;
               area=l*w;
               std::cout<<area<<std::endl;
        };14    12    C:\c++\2024 4 7\CShape.h    [Error] 'void CRectangle::GetArea(int, int)' marked override, but does not override

这里的报错显示并没有覆盖基类的虚函数而是在派生类定义了一个新的函数,如何才能使基类的函数被覆盖。

解决:将派生类的定义单独拿出来,将基类函数和派生类函数的形式一制化;

问题4:    void CRectangle(int l,int w):length(l),width(w){
        };

解决:类的构造函数不需要void

在派生类覆盖基类的纯虚函数是一定要对应包括const

问题五:如何定义派生类对象;

解决: eg. CRectangle rectangle(3,4);
    CCircle circle(5);

 最终版:

#include <iostream>

class CShape{
public:
    virtual double GetArea()const=0;//纯虚函数
    virtual double GetPerimeter()const=0;
    virtual ~CShape(){}
    
};

class CRectangle:public CShape{
    int length;
    int width;
    public:
         CRectangle(int l,int w):length(l),width(w){
        };
        virtual double  GetArea() const override{
               return length*width;
        };
         virtual double GetPerimeter()const override{
               return 2*(length+width);
        };

};

class CCircle:public CShape{
    int radium;
        public:
            CCircle(int r):radium(r){
            };
        virtual double  GetArea() const override{
               return radium*radium*3.14;
        };
        virtual double GetPerimeter() const override{
               return 2*3.14*radium;
        };

};

#include <iostream>
#include "CShape.h"

int main (){
    
    CShape *shape1;
    CShape *shape2;

    CRectangle rectangle(3,4);
    CCircle circle(5);
    
    shape1=&rectangle;
    shape2=&circle;
    
    std::cout<<"the rectangle area : "<<shape1->GetArea()<<std::endl;
    std::cout<<"the rectangle Perimeter : "<<shape1->GetPerimeter()<<std::endl;
    
    std::cout<<"the circle area : "<<shape2->GetArea()<<std::endl;
    std::cout<<"the circle Perimeter : "<<shape2->GetPerimeter()<<std::endl;
    

}

标签:const,函数,int,多态性,c++,2024,override,派生类,CShape
From: https://blog.csdn.net/tzzzzzh/article/details/137467797

相关文章

  • 2024.1.27c++测试订正代码
    测试订正生成括号题目描述王五是一名数学专业的同学,在课余选修了C++C++C++编程课,现在他能够自己写程序判断......
  • 【沈阳航空航天大学】 <C++ 类与对象计分作业>
    C++类与对象1.设计用类完成计算两点距离2.设计向量类3.求n!4.出租车收费类的设计与实现5.定义并实现一个复数类6.线性表类的设计与实现7.数组求和8.数组求最大值1.设计用类完成计算两点距离【问题描述】设计二维点类Point,包括私有成员:横坐标x,纵坐标y。能够......
  • C++初级----string类(STL)
    1、标准库中的string1.1、sring介绍    字符串是表示字符序列的类,标准的字符串类提供了对此类对象的支,其接口类似于标准字符容器的接口,但是添加了专门用于操作的单字节字符字符串的设计特性。    string类是使用char,即作为他的字符类型,使用他默认的char_tr......
  • 谷歌 Rust 团队工作效率是 C++ 团队的两倍
    谷歌Rust团队工作效率是C++团队的两倍来源:OSCHINA编辑: 白开水不加糖2024-04-0116:01:00 22国产数据库圈,为啥那么多水货?”谷歌Android工程总监LarsBergstrom在近期举行的RustNation大会上,介绍了该公司将Go或C++编写的项目迁移到Rust语言的......
  • 鸿蒙开发火到不行!2024年你还等什么,高薪offer等你拿!
    一、鸿蒙生态:一场席卷科技圈的“狂风巨浪”鸿蒙操作系统,这个曾经只存在于华为内部研发名单上的神秘名字,如今已如狂风巨浪般席卷了整个科技圈。鸿蒙系统的诞生,不仅标志着我国在操作系统领域的重大突破,更是对全球科技格局的一次重新洗牌。它打破了传统操作系统的局限,实现了......
  • Acwing2024蓝桥杯递归
    模板:欧几里得算法//若a,b互质则返回1,否则返回0intgcd(inta,intb){returnb?gcd(b,a%b):a;}题目:AcWing1360.有序分数暴力模拟法(AC):#include<iostream>#include<algorithm>#definexfirst#defineysecondusingnamespacestd;intn;typed......
  • 第十四届蓝桥杯省赛大学B组填空题(c++)
    日期统计:暴力枚举+set(自带排序加去重)#include<iostream>#include<set>usingnamespacestd;set<int>ans;inta[100]={5,6,8,6,9,1,6,1,2,4,9,1,9,8,2,3,6,4,7,7,5,9,5,0,3,8,7,5,8,1,5,8,6,1,8,3,0,3,7,9,2,7,0,5,8,......
  • 【专题】2024年3月电商行业报告合集汇总PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=35663原文出处:拓端数据部落公众号随着数字技术的飞速发展,电商行业正经历着前所未有的变革。本报告合集汇总旨在梳理2024年3月电商领域的最新动态和发展趋势。我们将从行业趋势与细分领域研究入手,深入探讨3C数码商用品、母婴营养品以及AI数字人产......
  • C++:类的静态成员
    无关类的实例化对象,是类自身的参数,所有同一类下的所有对象公用的成员使用如下classMyClass{public:staticintsta;//定义静态成员inta;charb;public:MyClass();~MyClass();//intoperator>=(MyClassA)//{//return......
  • 2024.4.7
    2024.4.7【南天寂静亮星少,北落师门赛明灯。】Sunday二月三十<theme=oi-"search">A.填充单词题目描述小C认识很多单词,但是他并不喜欢其中的一些单词。具体地说,如果一个单词包含连续的3个元音字母,或连续的3个辅音字母,或者1个“L”字母都不包含的话,这个单词是不被小C喜......