C++第一次上机
5-1使用引用作为函数参数
The meaning of Class
填空,实现部分类的特征只能读取,部分类的特征可读可写,部分类的属性只能写入
5-4动态对象的创建
5-5静态数据成员
5-6点类的定义和使用
已知平面上的一点由其横纵坐标来标识。本题要求按照已给代码和注释完成一个基本的“点”类的定义(坐标均取整型数值)。并通过主函数中的点类对象完成一些简单操作,分析程序运行结果,将答案写在对应的空格中。
5-7排队队吃果
幼稚园阿姨发糖,先到先得。请查询资料,使用队列(queue)容器模拟幼稚园小朋友Jack、Mary、Tom、Angela和Alex依次到达(入队)并依次出队领糖的过程。
5-8 new/delete
6-1 平面矩形 -
《C++编程基础及应用》- 习题13-4
分数 20
作者 海洋饼干叔叔
单位 重庆大学
在一个平面内,由左上角(top left)顶点坐标结合右下角(bottom
right)顶点坐标即可确定一个平面矩形。请设计Rect和Point类,使其可以被下述代码所利用,并产生期望的输出。
裁判测试程序样例:
输入样例:
输出样例:
请注意:函数题只需要提交相关代码片段,不要提交完整程序。
- Point topRight()生成并返回矩形右上角顶点坐标;
- Point bottomLeft()生成并返回矩形左下角顶点的坐标;
- 属性Point tl表示左上角顶点坐标, br表示右下角顶点坐标;
- int width(), int height()分别计算并返回矩形的宽,高;
- double
diagonalLength()计算并返回矩形的对角线长度,使用勾股定理进行计算。
Code
240401
6-2
类的定义(学生类Student)
分数 10
作者 刘骥
单位 重庆大学
本题要求定义一个学生类Student,数据成员包含姓名name和年龄age,类的声明见给出的代码,请给出类的完整实现,并通过测试程序。
类的声明:
测试程序:
测试程序的输入:
测试程序的输出:
提示
下列代码为类实现的骨架代码
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
Code
240401
6-3 动态输入排序
分数 20
作者 乔
单位 湖南工程学院计算机与通信学院
本题要求实现一个函数input,能够输入n个整数。
裁判测试程序样例:
输入样例:
在这里给出一组输入。例如:
输出样例:
在这里给出相应的输出。例如:
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
Code
240401
6-4 客户机类
分数 10
作者 杨军
单位 四川师范大学
实现客户机(Client)类。定义字符型静态数据成员ServerName,保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户机数量;定义静态函数ChangeServerName()改变服务器名称。完成程序,使得提供的测试程序可以运行并得到要求的结果。
函数接口定义:
裁判测试程序样例:
输入样例:
在这里给出一组输入。例如:
无
输出样例:
在这里给出相应的输出。例如:
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
Code
240401
这题纯纯sb,裁判机居然不自带头文件。
6-5 日复一日 -
《C++编程基础及应用》- 习题13-2
分数 20
作者 海洋饼干叔叔
单位 重庆大学
设计符合下述要求的日期类(Date),使得下述代码可以正常运行。
- 拥有数据成员year、month和day,分别存储年、月、日;
- 构造函数接受年、月、日参数并初始化全部数据成员;
- 公有成员函数toText()返回一个string对象,该字符串为该日期对象的文字表达,比如“2022-5-20”;
- 公有成员函数nextDay()返回一个Date对象,表示该日期的后一天;
- 公有成员函数prevDay()返回一个Date对象,表示该日期的前一天。
裁判测试程序样例:
输入样例:
说明:依次是年-月-日。
输出样例:
提示:需要注意闰年,闰年2月有29天,平年28天。 闰年判定函数:
请注意:函数题只需要提交相关代码片段,不要提交完整程序。
Code
240401
6-6
凸N边形的面积 - 《C++编程基础及应用》- 习题13-5
分数 20
作者 海洋饼干叔叔
单位 重庆大学
请设计符合下述要求的Point及Polygon类,使得程序可以正常运行。
平面内的N边形可以用N个顶点坐标来表示。请设计Point类表示一个顶点。请设计Polygon类表示一个N边形(N≥3):
- 私有数据成员pts类型为Point*,用于指向多边形的N个动态顶点对象;
- 构造函数接受一个整数n作为参数,n为多边形边数/点数;构造函数中需要动态分配顶点对象数组pts;
- setVertice(int i, const Point&
p)成员函数用于设置第i个顶点的坐标;
- getVertice(i)成员函数获取并返回多边形的第i个顶点;
- 在析构函数中释放动态顶点对象;
- 公有函数getArea()计算并返回该多边形的面积(假设多边形为凸多边形,计算方法参考练习11-5)。
练习11-5中关于凸六边形面积计算的描述:
如图所示,当六边形为凸六边形时,可以将其拆分成四个三角形,利用海伦-秦九韶公式分别计算三角形的面积并相加,即得凸六边形的面积。
裁判测试程序样例:
输入样例:
输出样例:
请注意:函数题只需要提交相关代码片段,不要提交完整程序。
Code
240401
CPP第二次上机
5-1
知识点2:普通构造函数及初始化
- 对象的初始化和清理也是两个非常重要的安全问题
- 一个对象或者变量没有初始状态,对其使用后果是未知
- 同样的使用完一个对象或变量,没有及时清理,也会造成一定的安全问题
- c++利用了构造函数和析构函数解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作。
构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用。
构造函数:类名(输入参数){函数体}
- 构造函数,没有返回值也不写void
- 函数名称与类名相同
- 构造函数可以有参数,因此可以发生重载
- 程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次
- 构造函数可以使用“:”进行初始化
成员变量通过构造函数初始化:
- 在实现构造函数时,还可以通过“:”运算符,在构造函数后面初始化成员变量,这种方式称为列表初始化,其格式如下所示:
类名(输入参数列表): 成员变量1(输入参数1), 成员变量的2(输入参数2),…, 成员变量n(输入参数n) { 函数体 }
构造函数的调用顺序:
- 类的成员变量也可以是属于别的类的对象
- 当创建对象a中含有属于别的类对象b时,先执行成员对象b的构造函数,再执行a的构造函数
例:
补全下面两个类,一个Birth
,一个Student
,后者的成员变量中含有前者的对象
5-2
知识点3:拷贝构造函数及构造函数的重载
拷贝构造函数:构造函数名称(const 类名 &对象名) { 函数体 }
- 拷贝构造函数是一种特殊的构造函数,它具有构造函数的所有特性,并且使用本类对象的引用作为形参,其作用是使用一个已经存在的对象初始化该类的另一个对象。
- 在定义拷贝构造函数时,为了使引用的对象不被修改,通常使用const修饰引用的对象。
构造函数重载:类名(不同的输入参数){函数体}
- 当定义具有默认参数的重载构造函数时,要防止调用的二义性。
例:
补充Birth类与Student类的拷贝构造函数,并对Student类的构造函数重载
5-3 知识点4:析构函数
析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作。
析构函数语法: ~类名(){}
- 析构函数,没有返回值也不写void
- 函数名称与类名相同,在名称前加上符号 ~
- 析构函数不可以有参数,因此不可以发生重载
- 程序在对象销毁前会自动调用析构,无须手动调用,而且只会调用一次
- 析构函数没有返回值,不能在析构函数名称前添加任何返回值类型。在析构函数内部,也不能通过return返回任何值。
析构函数的调用顺序
- 析构函数的调用顺序与构造函数的调用顺序是相反的。在构造对象和析构对象时,C++遵循的原则是:先构造的后析构,后构造的先析构。
什么时候调用析构函数
- 在一个函数中定义了一个对象,当函数调用结束时,对象应当被释放,对象释放之前,编译器会调用析构函数释放资源。
- static修饰的对象和全局对象,只有在程序结束时才会调用析构函数。
- new运算符创建的对象,在调用delete释放对象时,编译器会调用析构函数释放资源。
例:为Student类与Birth类加入析构函数,并观察Birth类与Student类析构函数调用顺序
5-4
知识点1:const修饰的成员变量与成员函数
分数 7
作者 郑远
单位 中国民用航空飞行学院
常成员变量:
- 对于常成员变量,仅仅可以读取第一次初始化的数据,之后是不能修改的。
- 常成员变量通常使用有参数构造函数进行初始化.
- 语法
const 变量类型 变量名
常函数:
- 成员函数后加const后我们称为这个函数为常函数
- 常函数内不可以修改成员属性
- 类中定义的成员函数若与常成员函数名相同则构成重载,常成员函数只能由const修饰的对象进行访问。
- 语法:
返回值类型 函数名() const {}
常对象:
- 声明对象前加const称该对象为常对象
- 常对象只能调用常函数
- 语法:
const 类名 对象名(构造函数参数)
语法:
5-5
知识点2:static修饰的成员变量与成员函数
静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员
静态成员分为:
- 静态成员变量 * 所有对象共享同一份数据 * 在编译阶段分配内存 *
静态成员变量定义语法
static 变量类型 变量名
*
类内声明,类外初始化,初始化语法为:变量类型 类名::变量名=初始化数(整体位于类定义的外面)
*
可以通过对象或类进行调用:对象.静态成员变量名
或类名::静态成员变量名
- 静态成员函数 * 所有对象共享同一个函数 *
静态成员函数只能访问静态成员变量 *
静态成员函数定义语法:
static 函数名(){}
*
可以通过对象或类进行调用:对象.静态函数名()
或类名::静态函数名()
知识点3:friend修饰的成员变量与成员函数
生活中你的家有客厅(Public),有你的卧室(Private);客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去。但是呢,你也可以允许你的好闺蜜好基友进去。
在程序里,有些私有属性
也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术;友元的目的就是让一个函数或者类
访问另一个类中私有成员
友元的关键字为 friend
友元的三种实现
- friend修饰别的类
- 友元类可以声明在类中任意位置。
friend class 类名
- 声明友元类之后,友元类中的所有成员函数都是该类的友元函数,能够访问该类的所有成员。
- friend修饰成员函数
- 友元成员函数声明语法:
friend 函数返回值类型 类名::函数名();
- 注意定义的先后,建议在前面进行声明,后面进行函数的同一定义,防止出现问题。
- friend修饰类外定义的函数
- 将类外部的普通函数作为类的友元函数,在类中使用friend关键字声明该普通函数就可以实现,友元函数可以在类中任意位置声明。
- 普通函数作为友元函数的声明形式如下所示:
friend 函数返回值类型 友元函数名(形参列表)
Code
6-1 猫和老鼠有多重
定义猫和老鼠:Cat与Mouse两个类,二者都有weight属性,定义二者的一个友元函数totalweight(),计算二者的重量和。
裁判测试程序样例:
输入样例:
输出样例:
Code
240415
6-2 你好,拷贝构造函数
定义一个类Point
:
- 构造函数传入
x
和y
的坐标值(整数),如果不传,默认都为0
- 编写复制构造函数
display
函数用于输出这个点的x
和y
坐标,以空格分隔
裁判测试程序样例:
输入样例:
在这里给出一组输入。例如:
输出样例:
在这里给出相应的输出。例如:
Code
240415
6-3 复数类
- 已知一个名为Complex的复数类,这个类包含:
(1)私有成员:实部、虚部,且均为int 型
(2)公有的带默认形参值的构造函数、复制构造函数
(3)公有成员函数Display,其作用为显示复数 要求:
(1)实现满足上述属性和行为的Complex类定义;
(2)设计函数AddComplex,函数AddComplex功能为实现两个复数相加,要求该函数的形参为复数类的常引用;
(3)保证如下主函数能正确运行。
裁判测试程序样例:
输入样例:
在这里给出一组输入。例如:
输出样例:
在这里给出相应的输出。例如:
Code
240415
6-4 实现数组类(C++
拷贝构造函数、拷贝函数)
裁判测试程序样例中展示的是一段实现“数组类”的代码,其中缺失了部分代码,请补充完整,以保证测试程序正常运行。
函数接口定义:
裁判测试程序样例:
输入样例:
输出样例:
Code
240415
7-1 队列操作
请实现一个MyQueue类,实现出队,入队,求队列长度
实现入队函数 void push(int x); 实现出队函数 int pop();
实现求队列长度函数 int size();
输入格式:
每个输入包含1个测试用例。每个测试用例第一行给出一个正整数 n (n <=
10^6) ,接下去n行每行一个数字,表示一种操作: 1 x :
表示从队尾插入x,0<=x<=2^31-1。 2 : 表示队首元素出队。 3 :
表示求队列长度。
输出格式:
对于操作2,若队列为空,则输出 “Invalid”,否则请输出队首元素。
对于操作3,请输出队列长度。 每个输出项最后换行。
输入样例:
输出样例:
Code
240415
7-2
完成队列类的拷贝控制函数
在队列类中添加拷贝构造函数、移动构造函数、移动赋值函数、重载赋值运算符=。并在主函数中测试:
调用拷贝构造函数,用已定义的一个队列类对象q构造新定义的对象q1。
调用赋值运算符,将一个已定义的队列类对象q赋值给另一个对象q2。
移除q的第一个元素。
输入格式:
输入一组整数到队列对象中,以ctrl+Z+enter结束输入。
输出格式:
q中的元素;
q1中的元素;
q2中的元素;
输入样例:
在这里给出一组输入。例如:
输出样例:
在这里给出相应的输出。例如:
Code
240415
7-3(选做)
无符号大数类
设计并实现一个具有构造、+、-、*、/、%、>、<、>=、<=、!=、==、<<等功能的无符号大数类。(为便于运算,无符号大数内部存放连续十进制位时采用低位在前、高位在后的方式,去除高位多余的0。无符号大数类应支持复制和赋值)
输入格式:
输入两个无符号大数A、B。
输出格式:
输出A+B=结果。
输入样例:
例如:
输出样例:
输出结果:
Code
240415
C++课后作业-运算符重载-继承
运算符重载
圆类定义如下,重载输入、输出运算符为友元函数,重载算术减法运算符为成员函数,参考给出代码进行填空。
复数的加法及输出
下述程序从控制台读取一个复数b的实部和虚部,然后将这个复数与复数a及实数3.2相加,得到复数c并输出。请参考注释将程序补充完整。
5-3 多层派生时的构造函数
根据所定义的基类,完成派生类的定义。
6-1 Point类的运算
定义Point类,有坐标x,y两个私有成员变量;对Point类重载“+”(相加)、“-”(相减)和“==”(相等)运算符,实现对坐标的改变,要求用友元函数和成员函数两种方法实现。对Point类重载<<运算符,以使得代码
Point p; cout<<p<<endl;可以输出该点对象的坐标。
函数接口定义:
实现Point类。
裁判测试程序样例:
输入样例:
无
输出样例:
在这里给出相应的输出。例如:
Code
240514
6-2
派生类使用基类的成员函数
按要求完成下面的程序:
1、定义一个Animal
类,成员包括:
(1)整数类型的私有数据成员m_nWeightBase
,表示Animal
的体重;
(2)整数类型的保护数据成员m_nAgeBase
,表示Animal
的年龄;
(3)公有函数成员set_weight
,用指定形参初始化数据成员nWeightBase
;
(4)公有成员函数get_weight
,返回数据成员nWeightBase
的值;
(5)公有函数成员set_age
,用指定形参初始化数据成员m_nAgeBase
;
2、定义一个Cat
类,公有继承自Animal
类,其成员包括:
(1)string类型的私有数据成员m_strName
;
(2)带参数的构造函数,用指定形参对私有数据成员进行初始化;
(3)公有的成员函数print_age
,功能是首先输出成员m_strName
的值,然后输出“,
age =
”,接着输出基类的数据成员m_nAgeBase
的值。具体输出格式参见main函数和样例输出。
类和函数接口定义:
裁判测试程序样例:
输入样例:
本题无输入。
输出样例:
Code
240514
6-3
私有继承派生类使用基类的成员函数
按要求完成下面的程序:
1、定义一个Animal
类,成员包括:
(1)整数类型的私有数据成员m_nWeightBase
,表示Animal
的体重;
(2)整数类型的保护数据成员m_nAgeBase
,表示Animal的年龄;
(3)公有函数成员set_weight
,用指定形参初始化数据成员m_nWeightBase
;
(4)公有成员函数get_weight
,返回数据成员m_nWeightBase
的值;
(5)公有函数成员set_age
,用指定形参初始化数据成员m_nAgeBase
;
2、定义一个Cat
类,私有继承自Animal
类,其成员包括:
(1)string
类型的私有数据成员m_strName
;
(2)带参数的构造函数,用指定形参对私有数据成员进行初始化;
(3)公有的成员函数set_print_age
,功能是首先调用基类的成员函数set_age
设置数据成员m_nAgeBase
的值为5,接着输出成员m_strName
的值,然后输出“,
age =
”,最后输出基类的数据成员m_nAgeBase
的值。具体输出格式参见main函数和样例输出。
(4)公有的成员函数set_print_weight
,功能是首先调用基类的成员函数set_weight
设置数据成员nWeightBase
的值为6,接着输出成员m_strName
的值,然后输出“,
weight =
”,最后调用基类的成员函数get_weight
输出基类的数据成员m_nAgeBase
的值。具体输出格式参见main函数和样例输出。
类和函数接口定义:
裁判测试程序样例:
输入样例:
本题无输入。
输出样例:
Code
240514
6-4
多重继承派生类构造函数
根据所给的基类Student和Teacher,定义Graduate类
类定义:
裁判测试程序样例:
输出样例:
Code
240520
6-5 鸭子也是鸟
按要求完成下面的程序:
1、定义一个Bird类,包含一个void类型的无参的speak方法,输出“Jiu-Jiu-Jiu”。
2、定义一个Duck类,公有继承自Bird类,其成员包括:
(1)私有string类型的成员name;
(2)带参数的构造函数,用指定形参对私有数据成员进行初始化;
(3)公有的成员函数printName,无形参,void类型,功能是输出成员name的值,具体输出格式参见main函数和样例输出。
裁判测试程序样例:
输入样例:
无输入
输出样例:
Code
240520
6-6
运算符重载(复数类Complex)
本题要求定义一个复数类Complex,类的声明见给出的代码,请给出类的完整实现,并通过测试程序。类的声明包括如下内容:
- 数据成员,复数类的实部u和虚部v;
- 对复数类实部和虚部的访问函数;
- 构造函数;
- 加号、减号运算符重载(遵守复数的运算规则);
- 输入、输出运算符重载。
类的声明:
测试程序:
测试程序的输入:
测试程序的输出:
提示
下列代码为类实现的骨架代码
Code
240520
6-7 N天以后 -
《C++编程基础及应用》- 习题17-2
改造练习13-1(日复一日)中的Date类并提交,使其可以与一个整数n相加或相减,得到该日期N天后/前的日期。
提示:
- 请参考题目(日复一日)中的Date类实现;
- 注意考虑闰月;
- 整数n的取值范围为[1,10000]。
裁判测试程序样例:
输入样例:
说明:意为求2022年8月31日的后两天和前两天的日期。
输出样例:
请注意:函数题只需要提交相关代码片段,不要提交完整程序。
Code
240520
6-8 复数排序 -
《C++编程基础及应用》- 习题17-4
设计符合下述要求的Complex复数类,使得下述程序可以正常运行:自定义>操作符函数,使得两个复数对象可以通过>操作符以“模”为基础进行大小比较。
要求:Complex的实部和虚部成员均使用double类型。
裁判测试程序样例:
输入样例:
说明:依次输入10个复数的实部和虚部
输出样例:
请注意:函数题只需要提交相关代码片段,不要提交完整程序。
Code
240520
6-9
你好,同名成员/成员函数覆盖/成员函数重写
编写一个类MyPerson
,继承自Person
,并重写函数show
,使得程序的输出符合预期。
裁判测试程序样例:
输入样例:
在这里给出一组输入。例如:
输出样例:
在这里给出相应的输出。例如:
Code
240520
C++第三次上机
2-1
对象之间的相互作用和通信是通过消息。( )不是消息的组成部分。
A. 接受消息的对象
B. 要执行的函数的名字
C. 要执行的函数的内部结构
D. 函数需要的参数
2-2
对定义重载函数的下列要求中,( )是错误的。
A. 要求参数的个数不同
B. 要求参数中至少有一个类型不同
C. 要求函数的返回值不同
D. 要求参数个数相同时,参数类型不同
2-3
下列函数中,( )不能重载。
A. 成员函数
B. 非成员函数
C. 析构函数
D. 构造函数
2-4
( )不是面向对象程序设计的主要特征。
A. 封装
B. 继承
C. 多态
D. 结构
2-5
在下面类声明中,关于生成对象不正确的是( )。
A. point p(10,2);
B. point *p=new point(1,2);
C. point *p=new point[2];
D. point *p[2]={new point(1,2), new point(3,4)};
2-6
执行以下的程序片段,将输出几个数字?
A. 0
B. 1
C. 2
D. 3
2-7
下列对变量的引用中错误的是____。
A. int a; int &p = a;
B. char a; char &p = a;
C. int a; int &p; p=a;
D. float a; float &p = a;
2-8
多继承是指()。
A. 一个派生类同时继承多个基类
B. 多个派生类同时继承一个基类
C. 基类本身又是一个更高一级基类的派生类
D. 派生类本身又是更低一级派生类的基类
2-9
下列运算符中,不可以重载的是( )。
A. new
B. ++
C. .*
D. []
2-10
C++输出流的插入符是( )。
2-11
关于信息隐蔽
信息隐蔽是通过 ▁▁▁▁▁ 实现的。
A. 抽象性
B. 封装性
C. 继承性
D. 传递性
2-12
类与对象的关系
在面向对象的开发方法中,类与对象的关系是 ▁▁▁▁▁。
A. 抽象与具体
B. 具体与抽象
C. 整体与部分
D. 部分与整体
2-13
下面对派生类的描述中,错误的是( )
A. 一个派生类可以作为另外一个派生类的基类
B. 派生类至少有一个基类
C. 派生类的成员除了它自己的成员外,还包含了它的基类的成员
D. 派生类中继承的基类成员的访问权限到派生类中保持不变
2-14
下列关于派生类构造函数和析构函数的说法中,错误的是()
A. 派生类的构造函数会隐含调用基类的构造函数
B. 如果基类中有默认构造函数,派生类可以不定义构造函数
C.
在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数
D.
在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数
5-1
填写程序中的空白,完成指定的功能。
输出数据如下:
5-2 包含子对象的派生类构造函数
根据所定义的基类,定义派生类,请填空完成程序的功能
程序输出如下
5-3 多层派生时的构造函数
根据所定义的基类,完成派生类的定义。
5-4 知识点1:函数重载
作用:函数名可以相同,提高复用性
函数重载满足条件:
- 同一个作用域下
- 函数名称相同
- 函数参数类型不同 或者 个数不同
或者 顺序不同
注意: 函数的返回值不可以作为函数重载的条件
例:
设计一个函数重载的程序,实现以下功能
输入两个整数,输出它们的和。 输入两个浮点数,输出它们的和。
输入两个字符串,输出它们的连接结果。
输入一个字符和一个整数,输出该字符重复该整数次的结果。
5-4
知识点3:拷贝构造函数及构造函数的重载
拷贝构造函数:构造函数名称(const 类名 &对象名) { 函数体 }
- 拷贝构造函数是一种特殊的构造函数,它具有构造函数的所有特性,并且使用本类对象的引用作为形参,其作用是使用一个已经存在的对象初始化该类的另一个对象。
- 在定义拷贝构造函数时,为了使引用的对象不被修改,通常使用const修饰引用的对象。
构造函数重载:类名(不同的输入参数){函数体}
- 当定义具有默认参数的重载构造函数时,要防止调用的二义性。
例:
补充Birth类与Student类的拷贝构造函数,并对Student类的构造函数重载
5-6
知识点1:const修饰的成员变量与成员函数
常成员变量:
- 对于常成员变量,仅仅可以读取第一次初始化的数据,之后是不能修改的。
- 常成员变量通常使用有参数构造函数进行初始化.
- 语法
const 变量类型 变量名
常函数:
- 成员函数后加const后我们称为这个函数为常函数
- 常函数内不可以修改成员属性
- 类中定义的成员函数若与常成员函数名相同则构成重载,常成员函数只能由const修饰的对象进行访问。
- 语法:
返回值类型 函数名() const {}
常对象:
- 声明对象前加const称该对象为常对象
- 常对象只能调用常函数
- 语法:
const 类名 对象名(构造函数参数)
语法:
5-7
知识点2:static修饰的成员变量与成员函数
静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员
静态成员分为:
- 静态成员变量 * 所有对象共享同一份数据 * 在编译阶段分配内存 *
静态成员变量定义语法
static 变量类型 变量名
*
类内声明,类外初始化,初始化语法为:变量类型 类名::变量名=初始化数(整体位于类定义的外面)
*
可以通过对象或类进行调用:对象.静态成员变量名
或类名::静态成员变量名
- 静态成员函数 * 所有对象共享同一个函数 *
静态成员函数只能访问静态成员变量 *
静态成员函数定义语法:
static 函数名(){}
*
可以通过对象或类进行调用:对象.静态函数名()
或类名::静态函数名()
5-8
知识点3:friend修饰的成员变量与成员函数
生活中你的家有客厅(Public),有你的卧室(Private);客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去。但是呢,你也可以允许你的好闺蜜好基友进去。
在程序里,有些私有属性
也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术;友元的目的就是让一个函数或者类
访问另一个类中私有成员
友元的关键字为 friend
友元的三种实现
- friend修饰别的类
- 友元类可以声明在类中任意位置。
friend class 类名
- 声明友元类之后,友元类中的所有成员函数都是该类的友元函数,能够访问该类的所有成员。
- friend修饰成员函数
- 友元成员函数声明语法:
friend 函数返回值类型 类名::函数名();
- 注意定义的先后,建议在前面进行声明,后面进行函数的同一定义,防止出现问题。
- friend修饰类外定义的函数
- 将类外部的普通函数作为类的友元函数,在类中使用friend关键字声明该普通函数就可以实现,友元函数可以在类中任意位置声明。
- 普通函数作为友元函数的声明形式如下所示:
friend 函数返回值类型 友元函数名(形参列表)
5-9 知识点1:加号运算符重载
5-10 知识点2:输出运算符的
5-11 知识点3:递增运算符重载
5-12 知识点4:赋值运算符重载
7-1
日程安排(多重继承+重载)
已有一个日期类Date
,包括三个protected
成员数据
另有一个时间类Time
,包括三个protected
成员数据
现需根据输入的日程的日期时间,安排前后顺序,为此以Date
类和Time
类为基类,建立一个日程类Schedule,包括以下新增成员:
生成以上类,并编写主函数,根据输入的各项日程信息,建立日程对象,找出需要最早安排的日程,并输出该日程对象的信息。
输入格式: 测试输入包含若干日程,每个日程占一行(日程编号ID
日程日期(****//*)日程时间(*::**))。当读入0时输入结束,相应的结果不要输出。
输入样例:
输出样例:
Code
240527
7-2 动物世界
Score 10
Author 陈晓梅
Organization 广东外语外贸大学
补充程序 :
1、实现Mammal
类的方法
2、由Mammal
类派生出Dog
类,在Dog
类中增加itsColor
成员(COLOR
类型)
3、Dog
类中增加以下方法:
constructors
:
Dog()
、Dog(int age)
、Dog(int age, int weight)
、Dog(int age, COLOR color)
、
Dog(int age, int weight, COLOR color)
、~Dog()
accessors
:
GetColor()
、SetColor()
Other methods
:
WagTail()
、BegForFood()
,并实现以上这些方法
。
提示:类似Speak()
、WagTail()
这些动作,函数体可以是输出一句话。比如:Mammal is spaeking...
, The Dog is Wagging its tail...
4、补充主函数的问号部分,并运行程序,检查输出是否合理。
输入格式:
无
输出格式:
按照程序格式输出。
输入样例:
在这里给出一组输入。例如:
输出样例:
在这里给出相应的输出。例如:
Code
240527
7-3 打印点、圆、圆柱信息
定义平面二维点类CPoint
,有数据成员x
坐标,y
坐标,函数成员(构造函数、虚函数求面积GetArea
,
虚函数求体积函数GetVolume
、输出点信息函数print
)。
由CPoint
类派生出圆类Cirle
类(新增数据成员半径radius
),函数成员(构造函数、求面积GetArea
,虚函数求体积函数GetVolume
、输出圆面积信息函数print
)。
再由Ccirle
类派生出圆柱体Ccylinder
类(新增数据成员高度height
),函数成员(构造函数、求表面积GetArea
,求体积函数GetVolume
、输出圆柱体体积信息函数print
)。在主函数测试这个这三个类。
打印数据保留小数点后2位
输入格式:
点的:x坐标 点的:y坐标 圆半径 圆柱高
输出格式:
点信息 圆面积 圆柱体积
输入样例:
在这里给出一组输入。例如:
输出样例:
在这里给出相应的输出。例如:
Code
240528
7-4
单继承中的构造函数与析构函数
编写代码实现一个表示点的父类Dot
和一个表示圆的子类Cir
,求圆的面积。
Dot
类有两个private
数据成员
float x,y;
Cir
类新增一个private
的数据成员半径float r
和一个public
的求面积的函数getArea( );
主函数已经给出,请编写Dot
和Cir
类。
输入格式:
输入圆心和半径,x
y
r
中间用空格分隔。
输出格式:
输出圆的面积,小数点后保留2位有效数字,注意:const double PI=3.14
,面积=PI*r*r
。
输入样例:
在这里给出一组输入。例如圆的中心点为原点(0,0)
,半径为3:
输出样例:
在这里给出相应的输出。例如:
Code
240528
7-5 定义一个Time类
定义一个时间类,能够提供和设置由时、分、秒组成的时间,并按照如下的格式输出时间:
08-09-24
12-23-59
输入格式:
请在这里写输入格式。例如: 12 8 9
8 24 59
输出格式:
请在这里描述输出格式。例如: 12-08-09
08-24-59
输入样例:
在这里给出一组输入。例如:
输出样例:
在这里给出相应的输出。例如:
Code
240528
7-6 绩点计算 -
《C++编程基础及应用》- 习题3-3
某大学的GPA(绩点)计算规则如下:
课程百分制成绩90分对应绩点4.0,超过90分的,按90分计;如不足90分,则课程绩点
= 4.0 * 分数/90
。
学生综合绩点按该生已修的各门课程绩点结合学分加权平均而得。
现有步步同学入学后的已修课程(共5门)成绩表如下,请编程计算其GPA。
输入格式:
第1门课程百分制分数 学分
第2门课程百分制分数 学分
第3门课程分制分数 学分
第4门课程百分制分数 学分
第5门课程百分制分数 学分
说明:百分制分数和学分均为整数。
输出格式:
请参考输出样例。其中,GPA值保留两位小数。
输入样例:
输出样例:
提示:从键盘读取输入的方法,请参考教材后续章节。
Code
240528
7-7 菲姐游泳 -
《C++编程基础及应用》- 习题3-5
游泳奥运冠军菲姐刻苦训练,从早上a时b分开始下水训练,直到当天的c时d分结束。请编程计算:菲姐当天一共训练多少小时多少分钟?
输入格式:
一行之内输入以空格分隔的4个非负整数,分别对应a,b,c,d。其中,0 ≤a<c
≤24;b和d均不大于60。
输出格式:
h:m。其中,整数h表示小时数,整数m表示分钟数,m应小于60。
输入样例:
输出样例:
Code
240528