【C++ 系列文章 -- 程序员考试 下午场 C++ 专题 201805 】

news2025/1/12 18:19:54

文章目录

    • 1.1 C++ 题目六
      • 1.1.1 填空(1)详解
        • 1.1.1.1 C++ 纯虚函数介绍
      • 1.1.2 填空(2)详解
        • 1.1.2.1 父类声明了带参构造函数
        • 1.1.2.2 子类中构造函数的构造原则
      • 1.1.3 填空(3)详解
      • 1.1.4 填空(4)详解
      • 1.1.5 填空(4)和(5)详解

1.1 C++ 题目六

阅读下列说明和C++代码,填写程序中的空(1)~(6),将解答写入答题纸的对应栏内。

【说明】
以下C++代码实现一个简单绘图工具,绘制不同形状以及不同颜色的图形。部分类及其关系如图 6-1 所示。
在这里插入图片描述

include <iostream>
include <string>

using namespace std;

class DrawCircle {       //绘制圆形,抽象类
         public:1)  ;//定义参数为 int radius, int x, int y
                virtualDrawCircle() { }
};

class RedCirclepublic DrawCircle {     //绘制红色圆形
         public:
                void drawCircle(int radius, int x, int y) {
                       cout << "Drawing Circle[red,radius: " <<radius;
                      cout << ",x: " <<x<< ",y: "<<y<< "]" << endl;
                }
};

class GreenCirclepublic DrawCircle {    //绘制绿色圆形
         public:
                 void drawCircle(int radius, int x, int y) {
                         cout <<"Drawing Circle[green,radius: " << radius;
                         cout <<",x: " <<x<< ",y: " <<y<< "]" << endl;
                }
};

class Shape {    //形状,抽象类
         protected:2;
         public:
                Shape(DrawCircle drawCircle) {
                         this -> drawCircle = drawCircle;
                }
                virtualshape() { } 
         public:
                virtual void draw() = 0;
};

class Circlepublic Shape {    //圆形
         private:
                 int x,y,radius;
         public:
                 Circle(int x,int y,int radius,DrawCircle drawCircle)3{
                         this->x = x;
                         this->y = y;
                         this->radius = radius;
                 }
         public:
                 void draw() {
                         drawCircle ->4;
                 }
};

int main()
{
        Shape redCircle=new Circle(100,100,10,5);//绘制红色圆形
        Shape greenCircle=new Circle(100,100,10,6);//绘制绿色圆形
        redCircle ->draw();
        greenCircle ->draw();
        return 0;
}

1.1.1 填空(1)详解

C++ 中定义一个类,通常会实现两个函数 构造函数和析构函数,如果用户没有定义这两个函数那么编译器会采用默认的构造函数和析构函数。从题目代码中可以看到 类 class DrawCircle 中定义了一个析构函数virtual~DrawCircle()但是没有看到构造函数,那么就有两种情况:

  • 采用编译器默认的构造函数;
  • 空(1)即是要实现的构造函数。

由于这个时候不确定,所以只能继续向下看代码,看到 类 class RedCircle and class GreenCircle继承了抽象类 class DrawCircle, 并且这两个类中都实现了成员函数void drawCircle(int radius, int x, int y), 对比这个成员函数与 空(1) 的注释可以得出 空(1) 应该是 抽象类class DrawCircle中定义的纯虚函数,因为它在子类中被重新实现了。所以 空(1) 应该填:

virtual void drawCircle (int radius,int x,int y) = 0

析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀

1.1.1.1 C++ 纯虚函数介绍

纯虚函数是在声明虚函数时被 “初始化” 为 0 的函数。声明纯虚函数的一般形式是 virtual 函数类型 函数名 (参数表列) =0;
注意:

  • ① 纯虚函数没有 函数体;
  • ② 最后面的 “=0” 并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”;
  • ③ 这是一个声明语句,最后应有分号

纯虚函数只有函数的名字而不具备函数的功能,不能被调用。它只是通知编译系统: “在这里声明一个虚函数,留待派生类中定义”。在派生类中对此函数提供定义后,它才能具备函数的功能,可被调用。

1.1.2 填空(2)详解

从下面代码中可以看到 空(2) 定义了一个 protected 东东。

class Shape {    //形状,抽象类
         protected:2;
         public:
                Shape(DrawCircle drawCircle) {
                         this -> drawCircle = drawCircle;
                }
                virtualshape() { } 
         public:
                virtual void draw() = 0;
};

这个时候我们要想到 C++ 中的潜规则:protected(受保护)成员变量或函数与私有成员十分相似,但有一点不同,protected(受保护)成员在派生类(即子类)中是可访问的。我们可以从两点推出 空(2) 填什么:

  • 继续看代码,可以发现 class Shape 的子类中使用到了 DrawCircle drawCircle ;
  • 抽象类 class Shape 中的 this->drawCircle,也就是 class Shape 类中肯定要有个成员变量 drawCircle,然后结合 class Shape带参数的构造函数Shape(DrawCircle drawCircle) 可知 drawCircle 类型为DrawCircle
1.1.2.1 父类声明了带参构造函数

在这种情况下,要特别注意。因为父类只有带参的构造函数,所以如果子类中的构造函数没有显示地调用父类的带参构造函数,则会报错,所以必需显示地调用。

1.1.2.2 子类中构造函数的构造原则

构造函数与父类的其它成员(成员变量和成员方法)不同,它不能被子类继承。因此,在创建子类对象时,为了初始化从父类中继承来的成员变量,编译器需要调用其父类的构造函数。如果子类的构造函数没有显示地调用父类的构造函数,则默认调用父类的无参构造函数。

  • 父类没有声明构造函数

    • 子类也没有声明自己的构造函数,则父类和子类均由编译器生成默认的构造函数。
    • 子类中声明了构造函数(无参或者带参),则子类的构造函数可以写成任何形式,不用顾忌父类的构造函数。在创建子类对象时,先调用父类默认的构造函数(编译器自动生成),再调用子类的构造函数。
  • 父类只声明了无参构造函数
    如果子类的构造函数没有显式地调用父类的构造,则将会调用父类的无参构造函数。也就是说,父类的无参构造函数将会被隐式地调用。

  • 父类只声明了带参构造函数
    见上节内容。

1.1.3 填空(3)详解

从代码中可以看到填空(3)是在class Shape的子类class Circle的构造函数Circle 后面添加些内容。

class Shape {    //形状,抽象类
         protected:2;
         public:
                Shape(DrawCircle drawCircle) {
                         this -> drawCircle = drawCircle;
                }
                virtualshape() { } 
         public:
                virtual void draw() = 0;
};

class Circlepublic Shape {    //圆形
         private:
                 int x,y,radius;
         public:
                 Circle(int x,int y,int radius,DrawCircle drawCircle)3{
                         this->x = x;
                         this->y = y;
                         this->radius = radius;
                 }
         public:
                 void draw() {
                         drawCircle ->4;
                 }
};

看到子类构造函数之前,先去瞟一眼它的父类中是怎么定义其构造函数的,这一看,不得了,发现它的父类中构造函数居然是个带参数的构造函数,为啥要带参数呢?上文已经说了,就是为了初始化父类中的成员变量。所以儿子在实现自己的构造函时候千万不要放了自己的老父亲,也要给父亲的部下(成员变量)上上电,具体怎么上电呢,也就是使用:显示调用下:

Circle(int x,int y,int radius,DrawCircle drawCircle) : Shape(drawCircle)

1.1.4 填空(4)详解

填空(4)drawCircle -> 是父类中定义的protectedDrawCircle drawCircle, 类DrawCircle drawCircle中定义了一个void drawCircle (int radius,int x,int y) 方法,所以 填空(4)drawCircle(radius,x,y)

1.1.5 填空(4)和(5)详解

根据class Circle 中的构造函数的参数定义 Circle(int x,int y,int radius,DrawCircle drawCircle),可知最后一个参数应该填对象作为Circle里面的实参。所以填:

  • new RedCircle()
  • new GreenCircle()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1155069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python小试牛刀:GUI(图形界面)实现计算器界面

Python GUI 是指 Python 图形用户界面库&#xff0c;它们可以帮助开发者创建在计算机上运行的图形用户界面&#xff08;GUI&#xff09;。下面是一些常用的 Python GUI 库&#xff1a; Tkinter&#xff1a; Tkinter 是 Python 的标准 GUI 库&#xff0c;它是一个开源的、跨平台…

LeetCode刷题之 存在重复元素(题目分析➕源代码)

题目链接&#x1f517;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 1. 题目分析 本题是要找到数组中的重复元素&#xff0c;所以我们分析出一下几点&#xff1a; 1. bool是一种数据类型&#xff0c;true是非0值&#xff0c;false是0.。 2. 数组…

绘制教材P68页产品的层次方框图。

层次方框图&#xff1a; 用树形结构的一系列多层次的矩形框绘制数据的层次结构&#xff0c;树形结构的顶层是一个单独的矩形框&#xff0c;它代表完整的数据结构&#xff0c;下面的各层矩形框代表这个数据的子集&#xff0c;最底层的各个框代表组成这个数据的实际数据元素&…

verilog语言学习

1. 时延 2. 一位全加器设计&#xff1a;三种建模方式 实际的设计中往往是这三种设计模式的混合 3. 4. 5. 6. 7. 建立模型时信号的连接&#xff08;重点&#xff09; 8. initial语句 9. always语句 在always中不能同时判断同一个信号的上升沿&#xff08;posedge&#xff0…

网工内推 | IDC网工、运维,上市公司,主流厂商认证优先,六险一金

01 软通动力 招聘岗位&#xff1a;ICD机房运维工程师 职责描述&#xff1a; 1.维护及管理数据中心内各类服务器及网络设备。 2.处理数据中心各类服务器和网络相关故障和告警。 3.负责数据中心内项目交付管理&#xff0c;包括LLD评审、硬装工艺验收、ASP施工管理等。 4.负责数据…

什么是互动广告

随着数字技术的迅速发展和消费者行为的转变&#xff0c;互动广告已成为现代广告行业的重要组成部分。互动广告以其独特的优势和形式&#xff0c;不断刷新人们对广告的认知&#xff0c;为广告行业带来新的机遇和挑战&#xff0c;那么就来一起了解互动广告吧。 一、互动广告的定义…

笔记49:53语言模型--课程笔记

本地笔记地址&#xff1a;D:\work_file\DeepLearning_Learning\03_个人笔记\3.循环神经网络\语言模型 PS&#xff1a;沐神别怪我&#xff0c;实在是截屏避不开啊&#xff0c;我就留个备忘&#xff0c;在我博客里先委屈一下哈&#xff0c;对不住了 a a a a a a a a a a…

二十一、Arcpy批量镶嵌——结合Landsat数据提取城市建成区

一、前言 前文介绍Pycharm软件安装和激活,以及运行环境的设置,本文就详细介绍一下几何Landsat数据有哪些步骤可以通过Arcpy代码来实现批量操作,其实主要集中在Landsat数据预处理过程中,包括数据镶嵌、裁剪、去背景、重采样以及波段组合计算、NDVI、NDBI计算,在一定程度上…

JetBrains TeamCity远程命令执行漏洞

一、免责声明&#xff1a; 本次文章仅限个人学习使用&#xff0c;如有非法用途均与作者无关&#xff0c;且行且珍惜&#xff1b;由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;公众号望雪阁及作者不为此承…

EPLAN连接编号的问题

连接编号的问题 1.连接编号的目的 连接编号也就是常说的编线号.编线号的目的是为了在现场装配,调试,检修的时候,方便查线.使真实的接线与原理图能够方便地对应. 2.标准对连接编号的规定 标准中规定了导线应该编线号,但是没有说一定要使用什么样的规则.我觉得保证正常使用的前提…

YOLOv8改进: AIFI (尺度内特征交互)助力YOLO | YOLO终结者?RT-DETR一探究竟

💡💡💡本文全网首发独家改进: AIFI (尺度内特征交互)助力YOLO ,提升尺度内和尺度间特征交互能力,同时降低多个尺度的特征之间进行注意力运算,计算消耗较大等问题 推荐指数:五星 AIFI | 亲测在多个数据集能够实现涨点 💡💡💡Yolov8魔术师,独家首发创新(…

unordered系列关联式容器--哈希结构详细讲解及使用示例

目录 unordered系列关联式容器unordered_map 哈希哈希概念哈希函数直接定址法&#xff1a;除留余数法&#xff1a; 哈希冲突解决哈希冲突闭散列&#xff1a;开散列&#xff1a; unordered系列关联式容器 之前讲解在C98中STL提供了底层为红黑树结构的一系列关联式容器&#xff…

基于动物迁徙算法的无人机航迹规划-附代码

基于动物迁徙算法的无人机航迹规划 文章目录 基于动物迁徙算法的无人机航迹规划1.动物迁徙搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用动物迁徙算法来优化无人机航迹规划。 …

Django实战项目-学习任务系统-用户管理

接着上期代码框架&#xff0c;开发第6个功能&#xff0c;用户管理&#xff0c;查看用户信息和学生用户属性值&#xff0c;尤其是总积分值&#xff0c;还可以查看积分流水明细&#xff0c;完成任务奖励积分&#xff0c;兑换物品消耗积分。 第一步&#xff1a;编写第6个功能-用户…

ChatGPT 3.5只有200亿规模的参数?最新微软的论文暴漏OpenAI的ChatGPT的参数规模远低于1750亿!

本文来自DataLearnerAI官方网站&#xff1a;ChatGPT 3.5只有200亿规模的参数&#xff1f;最新微软的论文暴漏OpenAI的ChatGPT的参数规模远低于1750亿&#xff01; | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051698672594665 2022年11月底发布的Cha…

Java,面向对象,多态性

多态性是面向对象的第三大重要特征&#xff0c;建立在继承性之上。 多态性一词怎么理解呢&#xff1f;就是一个事物的多种形态的性质。在面向对象中&#xff0c;主要体现为一个父类的属性方法可以继承给多个子类。子类就理解为父类的多种形态。以动物为例&#xff0c;猫和狗都有…

SOAP协议是什么协议,有什么作用

SOAP&#xff08;Simple Object Access Protocol&#xff09;是一种基于XML的协议&#xff0c;用于在网络上进行信息交换。它是一种轻量的协议&#xff0c;旨在进行分布式计算环境中的通信。SOAP可以通过各种下层协议来传输&#xff0c;但最常用的是HTTP。 主要作用&#xff1…

桂林阳朔旅游攻略

桂林上水甲天下&#xff0c;阳朔上水甲桂林&#xff01;阳朔县城看着有点破&#xff0c;但是阳朔的山水真是一绝&#xff0c;适合慢下来&#xff0c;骑个电瓶车来放松心情&#xff01; 适合游玩时间3天左右。 主要景点:十里画廊、兴坪古镇、如易峰、相公山、20元人民币打卡处…

uniapp开发号卡系统

我们先来看一下效果图 商品分享、店铺分享等功能 部分代码 <template><view class""><view class"uy-bg-ffffff uy-p-20 uy-m-t-20 uy-b-r-20 uy-rel" v-for"(item,index) in list" :key"index"><view class&q…