C++讨论题

面向对象程序与设计@C++讨论题
1.讨论多重继承的二义性及其解决方法
当基类和子类都定义了具有相同名称的函数时,在主函数中调用子类的该函数时会出现二义性,因为系统不知道是调用基类的函数还是子类的,可以用区域限定符或者把基类的同名函数改为虚函数。
【或 a. 虚基类、虚继承 b.区域限定符(::)】

2.为什么要定义派生类?
(在一些系统里,基类定义是有必要的,请讨论派生方法的使用,有哪些意义?)
派生类是在继承了基类的属性的基础上发展了新的属性的延申,派生类是不同的对象有相同的共性但又有自身的特点,方便研究不同对象的共性和特性,同时也方便了定义不同类时的程序,使代码更简洁,提高代码的利用性。
[派生类的使用: class 在定义的类名后面 + :权限 + 要继承的类名称
派生类主要功能是在以后的开发中方便,减少代码冗余,也就是提高代码的可重]

3.讨论this指针
(this指针是C++实现封装的一种机制,将对象和对象调用的成员函数联系在一起,使得从外部看,每一个对象均有自己的成员函数。请讨论如何通过this指针访问成员变量或成员函数,举例来说明。)
a、(*this).成员变量或成员函数
b、this->成员变量或成员函数

4.讨论构造函数对对象数据成员初始化功能
(构造函数是一个重要的函数,程序中实现对对象的“构造”,对对象的数据进行初始化。请说明对对象数据成员进行初始化工作可以使用哪些方式进行。)

a、在构造函数(不带参数)体内部对对象中的数据成员进行初始化;
b、在构造函数(带参数)内部对对象中的数据成员进行初始化;
c、在构造函数的初始化列表中对数据成员进行初始化。

5.拷贝构造函数什么时候调用
(我们知道,拷贝构造函数是一自特殊的构造函数,也是由系统自动调用的,什么时候需要调用拷贝构造函数?)
a.用对象初始化
b.函数对象参数
c.函数返回对象值时

6.如何访问对象
(对象是一个集合体,有数据和行为。访问对象就是要访问对象的成员。讨论对象哪些成员可以通过对象来访问。通过实例来说明对象的封装性。)
通过参数,对象名来访问对象,即访问对象向外开放的接口来访问对象

7.如何理解类的抽象性
(对象的抽象性是指忽略事物中与当前无关的非本质特征,考虑事物中与当前目标有关的本质特性,主要找出处理对象的共性,把具有共性的事务归为一类。请你举例说明这段文字,即是说明类的抽象性特点。)
抽象将有关事物的共性归纳,集中的过程。将一些具体事物对象,抽取共同特征后,归为一类。如:古风类歌曲,对象就是一首具体的歌

8.关于逻辑运算的讨论
(逻辑运算是表达复杂的关系,运算符常用就是三个:&&||,运算规则不是问题。C语言计算逻辑表达式时,并不是严格按照优先级高低依次计算:先进行算术运算,再执行关系运算,最后进行逻辑运算。而是采用一个优化方案:对于exp1&&exp2,形式表达式,只要exp1为假,就不计算exp2的值了;对于exp1||exp2形式表达式,只要exp1为真,就不计算exp2的值了。在平时使用时注意这个优化策略。有时会带来想不到的结果。比如:如果a为真,表达式:a||(b+=3),后面b+=3运算就没有进行。大家也可以列举一些实例来分析说明。)
对于&&是“逻辑与”,只要表达式中有一个为假,则整个表达式都为,对于||是“逻辑或”,表达式中有一个为真命题。则输出为

9.讨论常成员
(常成员是为了增加数据的共享性,静态成员也有这个功能,请分析二者的区别与联系。)
静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 ::重新声明静态变量从而对它进行初始化常成员函数只能通过构造函数的初始化表对其进行初始化,常成员变量所在类中所有的构造函数都必须通过初始化表对常成员变量初始化,常成员函数只能调用常成员函数,不能调用普通成员函数

10.为什么不能对类的数据成员初初化?
(类有两类成员:数据成员和成员函数,但对类的数据成员不能在类定义时初始化。为什么?)
类的定义相当于类型的声明,没有分配存储空间,无法进行数据成员的初始化,类的初始化一般是在构造函数中进行

11.友元函数的讨论
(类具有封装性和隐藏性,有时这种封装性带来不便,需要一定程序上打破封装和隐藏而提高程序效率,什么是这种情况,举例说明。友元函数可以是什么函数,如何定义)
友元函数可以打破类的封装性。友元函数可以是非成员函数,也可以是一个类的成员函数,在定义是要在函数的类型符前加关键字friend

12.讨论静态成员。
(静态成员包括静态数据成员和成员函数。静态成员函数一般目的是操用静态数据成员的。如何理解静态数据成员是对象共享数据,什么情况下需要使用静态数据成员,举例说明。)
静态数据成员是在全局定义而不是在类中定义,并且对于所有类对象来说只有一份,因此是对象共享的数据。一个班的学生成绩各不相同,都是不同对象的数据成员,但是如果要计算一个班学生的总成绩,就要用到静态数据成员

13.讨论不同成员的作用域
(什么是类的作用域?对于类的不同属性成员的作用域是怎样的?通过作用域的掌握,理解封装性,理解对象是数据和行为的高度依赖性。)
在作用域内,成员可互相访问;作用域公有的成员,包括数据成员和成员函数,以对象名.成员名形式来使用类的对象;私有的成员无法访问;protected成员访问需要一定的条件

14.如何理解“使用内联函数可以提高程序执行效率”这句话?
(从一般函数调用过程入手,掌握内联函数的定义,请你讨论“使用内联函数可以提高程序执行效率”,是怎样的提高法?是空间效率还是时间效率提高了?)
一个函数的调用要付出时间上的代价,要是一个函数被调用了许多次,那么编译系统需要来回往返许多趟,存在开销。而内联函数是在编译时将函数体嵌入每一个调用处,大大提高了效率

15.为什么要使用函数
(C语言可以称为函数语言,程序是以函数为单位。试讲讲函数的使用意义。)
提高了程序的易读性和可维护性,还可以把程序中普通用到的一些计算或操作编成通用的函数,以供随时调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值