第2章 c++面向对象程序设计。
2.1 类和对象。
1.什么是类?类的定义格式?类的成员一般分为哪两部分?它们的区别如何?
“类”是对具有共同的属性特征和行为特征的对象的概括和抽象。
类的定义格式:
class 类名;
类的成员一般分为数据成员和成员函数两部分。
数据成员一般用来表示对象属性特征,而成员函数一般表示了对象的可以进行的操作,即行为特征。
2.类与结构体有什么区别?
类中可以包含两类成员――数据成员和成员函数;而标准c语言中的结构体只能包含数据成员;但是c++中的结构体对c语言中的结构体有扩展,c++中的结构体也可以两类成员――数据成员和成员函数;因此c++中的类和c++中的结构体出来在定义方式上不一样之外(class,struct ),还有就是它们的缺省封装字是不一样的,一个是private,一个是public。
3.什么是对象?如何定义一个对象?对象的成员如何表示?
对象是类的实例,是类的变量。
对象的定义: 类名对象名称;
或:类名 * 对象指针;
对象成员的表示:对象名称。成员名字;
或: 对象指针→成员名字;
4.什么是构造函数?构造函数有哪些特点?
构造函数是类的成员函数,它有以下特点:
构造函数的名字必须与类名相同。
构造函数可以有任意的形参,但不能具有返回值。
定义对象时,编译系统会自动地调用构造函数。
构造函数可以重载。
5.什么是析构函数?析构函数有哪些特点?
析构函数也是类的成员函数,它有以下特点:
析构函数名也应与类名相同,只是在函数名前面加一个波浪符~。
析构函数不能带任何参数,也没有返回值。
每个类有而且只能有一个析构函数。析构函数不能重载。
6.什么是默认构造函数和默认析构函数?
假如用户没有自己编写构造函数或析构函数,编译系统也会自动生成一个构造函数和析构函数,这就是默认的构造函数和析构函数,但是这两个函数没有任何参数,也不进行任何操作。
7.什么是复制构造函数?它的功能和特点是什么?
复制构造函数是一种特殊的构造函数,它用来在已存在的对象基础上建立一个新对象。
复制构造函数的名称也和类名是一样的,但是它的形式参数,都是指向一个已经存在的对象,因此它的形式参数都是这种形式:“const 类名 &ob”,即是一个对象的引用。
9.如何对对象进行初始化?
对象的初始化都是通过构造函数进行的,只要在声明对象时,逐个添好构造函数的实参。
11.什么是this指针?它有何作用?
一个类可以同时有很多对象存在,许多不同的对象可以调用相同的成员函数,编译系统为了知道当前是那个对象在调用成员函数,因此定义了this指针,this指针其实就是指向当前对象的指针。
12.什么是类的作用域?对象的生存期有何不同?
类的作用域简称类域,它是指在类的定义中由一对花括号所括起来的部分,每一个类都具有相应的类域。类域中定义的变量不能使用auto,register和extern等修饰符,只能用static修饰符,函数也不能用extern修饰符。
所谓对象的生存期是指对象从被创建开始到被释放为止的时间,按生存期的不同对象可分为如下三种:
1、局部对象:当对象被定义时调用构造函数,该对象被创建,当程序退出定义该对象所在的函数体或程序块时,调用析构函数,释放该对象。
2、静态对象:当程序第一次执行所定义的静态对象时,该对象被创建,当程序结束时,该对象被释放。
3、全局对象:当程序开始时,调用构造函数创建该对象,当程序结束时调用析构函数释放该对象。
2.2 继承和派生类。
20.派生类是如何定义的?它有哪些特点?
定义派生类的一般形式为:
class 派生类名:[引用权限] 基类名。
派生类新增的数据成员。
派生类新增的成员函数
派生类继承了基类的所有数据成员和成员函数,并增加新的成员。
21.派生类的继承方式有哪些?它们各有哪些特点?
这是继承技术中比较关键的问题。
从基类继承来的成员的引用,不是简单地把基类的私有成员和公用成员直接作为派生类的私有成员和公用成员来使用,而要根据基类成员的“封装权限”和派生类声明的“引用权限”共同决定。
当引用权限为public时,称为“公用派生类”。在公用派生类中,;然而基类中的私有成员却成为了派生类中的“不可访问的成员”,不能被派生类使用。
当引用权限为private时,称为“私有派生类”。在私有派生类中,基类的公用成员和保护成员成为了派生类中的私有成员,基类的私有成员成为派生类“不可访问的成员”。
从以上两点可以看出,基类中的私有成员在派生类中都成为了“不可访问的成员” 。因此在继承中经常使用另外一种封装字protected,被protected封装的成员称为“保护成员保护成员和私有成员相似,不能被外界引用,但它却可以被派生类的成员函数引用。
22.在定义派生类的过程中,如何对基类的数据成员进行初始化?
基类的数据成员初始化往往是通过基类的构造函数进行的,但是在么在建立派生类的对象时,是不会自动执行基类的构造函数,因而就会使基类中成员变量未初始化。所以在设计派生类的构造函数时,不仅要考虑派生类所增加的成员变量初始化,还应当考虑基类的成员变量初始化。在执行派生类的构造函数时,应当调用基类的构造函数。
因此考虑到基类成员变量初始化后,派生类的构造函数一般形式为:
派生类构造函数名(参数表):基类构造函数名(参数表)
例如:student(int n,char nam,char s,int a,char ad stud(n,nam,s)
其中,student类是stud的派生类。
23.在派生类中能否直接访问基类中的私有成员?在派生类中如何实现访问基类中的私有成员?
在派生类中是不能直接访问基类中的私有成员的,要在派生类中访问基类中的私有成员,只能通过基类所提供的public或protected封装的成员函数进行。
24.什么是虚基类?它的作用如何?
在声明派生类时,在基类的引用权限前面加上virtual,就将基类声明成了虚基类,即:
class 派生类名:virtual [引用权限] 基类名。
虚基类的引入主要是针对多重派生的,是为了消除派生类的二义性使用的。通过虚基类派生出来的新类,同一个成员变量在不同的派生类中都只有一个复制,当通过普通基类派生的新类,同一个成员变量,在不同的派生类中的副本是不一样的。
第3章 mfc基本应用程序的建立
1. windows的应用程序特点有哪些?
参考书(p143~145)
2. mfc的appwizard(exe)提供了哪几种类型的应用程序?
使用mfc的appwizard可以创建下面三种类型的应用程序:
(1)单文档界面的应用程序(sdi,single document interface);
(2)多文档界面的应用程序(mdi,multiple documents interface);
(3)基于对话框的应用程序(dialog based)。
3.mfc有哪些机制?这些机制有什么用?
4.用appwizard创建一个多文档应用程序项目(mdi)ex_mdihello,比较mdi与sdi有哪些区别?
sdi应用程序由应用程序类(cwinapp)、框架窗口类(cframewnd)、文档类(cdocument)、视图类(cview)和文档模板类(csinsledoctemplate)共同作用。mdi应用程序与sdi应用程序的主要差别在于:mdi有cmdiframewnd和cmdichildwnd两个框架窗口类,前一个派生cmainframe类,负责菜单等界面元素的主框架窗口管理;后一个派生cchildframe类,负责相应的文档及其视图的子框架窗口维护。
而sdi由框架窗口类cframewnd派生cmainframe类。
5.消息的类别有哪些?用classwizard如何映射消息?
C复习习题讲解
面向对象程序设计。1.描述new有两种用法。第一种 new class 创建对象。第二种 覆盖方法。public new xxxx 2.类成员有 种可访问控制权限。可访问性 public protected private,internal 3.用sealed修饰的类有什么特点。sealed 修饰符...
C 上机作业答案讲解
第一章作业答案 1.编写程序,将华氏温度转化为摄氏温度 公式 c 5 9 f 32 程序 include using namespace std void main float f,c cout please input f cin f c 5 f 32 9.0 cout c 第一章作业答案 1.编...
代数竞赛讲解及习题讲解
棣莫弗 de moivre 定理设两个复数 用三角形式表示 z1 r1 cos 1 isin 1 z2 r2 cos 2 isin 2 则 z1z2 r1r2 cos 1 2 isin 1 2 复数有多种表示形式,常用形式 z a bi 叫做代数式。此外有下列形式。几何形式。复数z a bi 用直角...