c++定义Student类,内含name和age,无参析构函数为Student();怎么输入数据?

C++基础(五)虚函数、重载、覆盖、隐藏 虚函数总是跟多态联系在一起引入虚函数可以使用基类指针对继承类对象进行操作!虚函数:继承接口(函数名,参数返回值),但是實现不继承(函数体)

非虚函数:继承接口也继承实现;

1)虚析构函数(当一个类打算作为基类使用时候,其析构函数必须是虚函数)

构造函数可鉯为虚函数吗 不可以,在生成对象的时候必须向编译器明确指定要生成什么类型的对象,因而不存在虚函数的问题;只有当对象已经存在我用什么接口去操作它的问题;

这里通过指针去调用B类的析构函数,但是如果 ~()不是虚析构函数就不存在多态,就会去调用中的析構函数最后结果可能是B对象中的成分被析构了,其他 还残留;所以当一个类作为基类时候其析构函数必须是虚函数,这样防止出现析構不完全的情况;

2)当虚函数出现在构造、析构函数中时(即在构造函数中调用虚函数)函数退化为普通函数。为什么 <>中条款

这里调用BuyTrnsction的构慥函数,因为BuyTrnsction是继承类所以先调用基类的构造函数此时派生类独有的那部分还未初始化,<>中这么解释:“这个对象内的BuyTrnsction成分还未初始化最安全的办法是当他不存在,对象在derived成分还未初

3)虚函数与覆盖重载,隐藏

重载首先出现在非继承关系当中当同一个类中,两个函数嘚参数不同名字相同,返回值类型无所谓(函数返回值不作为重载的参考因为函数调用时候不出现返回值);

注意两个函数可以仅仅因为const與非const的差别来实现重载;

虚函数与覆盖均出现在一个继承体系中,覆盖针对的是普通函数当父类子类中出现同名(相同返回值,相同参数相同函数名)要求绝对一致

虚函数在父类子类中,首先在父类中声明该函数为virtul那么子类可以重新定义该函数的实现,这里主要涉及多態就是覆盖的情况加上virtul,通过指针或者引用实现多态;

隐藏显得简单粗暴在继承类中只要出现于父类同名(只要求同样的函数名/变量名,其他返回值virtul 非virtul不管)的函数,则用对象调用同名函数时候基类对应的同名函数、变量隐藏,如果要访问其父类的同名成员应该明确使鼡 基类名::成员来访问;

1)覆盖与虚函数是一对兄弟要求函数的返回值,函数名参数严格一致,虚函数是覆盖加上virtul的情况;

2) 隐藏是覆蓋的推广覆盖是隐藏的特例,只要求函数名一样其他不管,在继承体系中子类的同名函数会将父类的同名函数隐藏;

3)当使用指针时候,指向基类的指针会根据实际对象的类型选择相应的虚函数执行,如果派生类没有重新定义基类的虚函数那么依然执行基类的虚函數;

4)当不存在虚函数的情况下,使用基类的指针不会下降到派生类中去搜索函数;所以virtul属性相当于告诉基类指针:当执行我时,请到相應对象中搜索对应的虚函数;

5)纯虚函数所在的类是抽象类不能实例化,定义了纯虚函数意味着这个函数只能为父类其负责定义接口而鈈负责实现;

6)当使用对象来调用相应的函数时候,主要考虑的是对基类同名函数的隐藏(包括覆盖)而不需要考虑多态;

7)注意构造析构函数Φ不能调用虚函数,当执行派生类的构造函数时候先构造的是其基类成分,再执行派生类成分的构造虚函数此时无意义;

8)c++是个细节非瑺多,非常复杂的语言

更多内容,欢迎关注我的公众号:无情剑客

自考C++程序设计2016年10月试题及答案解析

自考C++程序设计2016年10月试题及答案解析该试卷为自考C++程序设计历年真题试卷,包含答案及详细解析

一、单项选择题(本大题共20小题,每小題1分共20分。)在每小题列出的备选项中只有一项是最符合题目要求的请将其代码填写在题后的括号内。错选、多选或未选均不得分

1.一個函数的功能不太复杂,但要求被频繁调用选用最适合的是(  )

3.在下面有关析构函数特征的描述中,正确的是(  )

.一个类中可以定义多個析构函数
B.析构函数名与类名完全相同
C.析构函数不能指定返回类型
D.析构函数可以有一个或多个参数

4.派生类的对象对它的哪一类基类成员是鈳以访问的(  )

.公有继承的基类的公有成员
B.公有继承的基类的保护成员
C.公有继承的基类的私有成员
D.保护继承的基类的公有成员

5.如果是抽象類则下面正确的是(  )

6.下列关于纯虚函数与抽象类的描述中,错误的是(  )

.纯虚函数是一种特殊的函数它允许没有具体的实现
B.抽象类昰指具有纯虚函数的类
C.一个基类的说明中有纯虚函数,该基类的派生类一定不再是抽象类
D.抽象类只能作为基类来使用其纯虚函数的实现甴派生类给出

8.下列哪个函数不是类的成员函数(  )

9.下列有关重载函数的说法中错误的是(  )

.重载函数必须具有不同的返回值类型
B.重载函数洺必须相同
C.重载丞数参数个数可以不同
D.重载函数必须有不同的形参列表

10.下面说法正确的是(  )

.生成对象时调用析构函数
B.定义类时必须写出該类的构造函数
C.调用构造函数时必须在主函数中明确写出调用格式
D.析构函数不可以重载

11.在编译指令中,宏定义使用指令(  )

14.进行文件操作時需要包含头文件(  )

16.动态编联所支持的多态性称为运行时的多态性支持的函数是(  )

17.用运算符delete删除—个动态对象时(  )

.首先为该动态對象调用构造函数,再释放其占用的内存
B.首先释放该动态对象占用的内存再为其调用构造函数
C.首先为该动态对象调用析构函数,荐释放其占用的内存
D.首先释放该动态对象占用的内存再为其调用析构函数

18.下列字符常量的写法中,错误的是(  )

19.C++类体系中不能被派生类继承嘚有(  )

20.下列对派生类的描述中,错误的是(  )

.派生类至少应有一个基类
B.派生类的成员除了自己定义的成员外还包含了它的基类成员
C.基類中成员访问权限继承到派生类中都保持不变
D.一个派生类可以作为另一个派生类的基类

二、填空题(本大题共20小题,每小题1分共20分)请在每尛题的空格中填上正确答案。错填、不填均无分

12.C++程序有且只能有一个名为________的主函数。

14.所谓“________”就是将一个新标识符和一块已经存在的存儲区域相关联

15.动态分配内存使用关键字________,释放内存使用关键字delete

17.面向对象的程序设计方法是以________代表求解问题的中心环节。

18.对象的________只能由這个对象的操作来存取

110.类对象一般都包括数据成员和________。

111.将对象作为函数参数是将实参对象的值传递给________。

112.C++函数的返回值类型可以是除________和函数以外的任何类型

113. 函数重载可使一个函数名具有多种功能,称这种特性为________

115.关键字privte、public和________以后的成员分别叫做私有成员、公有成员和保護成员。

116. 使用关键字const修饰的数据成员称为________数据成员

119.说明纯虚函数的一般形式为“clss类名{ ________函数类型函数名(参数列表)=0; };”。

120.运算符重载需要使用關键字“________”

三、改错题(本大题共5小题,每小题2分共10分)

四、完成程序题(本大题共5小题,每小题4分共20分)

五、程序分析题(本大题共2小题,烸小题10分共20分)

六、程序设计题(本大题共1小题,共10分)

51.有一个Person类私有数据成员nme、ge和sex分别表示人的姓名、年龄和性别。雇员类Employee是Person的派生类噺增数据成员部门deprtment和薪水slry。请用C++代码描述这两个类并用Employee类的成员函数Disply实现雇员的姓名、年龄、性别、部门和薪水的输出。(要求编写派生類的构造函数)

面向对象程序设计实验二:构造函数与析构函数

理解构造函数和析构函数的定义与执行过程

学会构造函数的重载方法。

学会拷贝构造函数的定义方法

,要求用构造函數对数据成员进行初始化用成员函数

要求用重载构造函数的方法提供

种或以上初始化数据成员

定义一个拷贝构造函数,

的大小为原对象嘚一半

管理一个学生的基本信息,

要求用带三个参数的构造函数初始化数据成员

个成员函数分别修改学号、

(注意在程序中体现对象嘚构造和析构过

)请大家按学号来坐,便于考勤和管理

)请珍惜宝贵的实验时间!不要做与实验无关的事情,比如聊

我要回帖

更多关于 writer 的文章

 

随机推荐