1、班级:计算机 1班 姓名:闫婷婷学号:2010036118第 1 页 共 38 页 11:37:05 上午 5/5/20191.类定义由哪些部分组成?在定义和使用时要注意什么问题?答:(1)类的定义一般可以分为“类的说明 ”和“类的实现”。(2)说明部分用于声明类的成员,保护数据成员和成员函数;(3)实现部分是类的各成员函数的具体实现;(4) 在类定义的部分,一般只声明函数原型,而将函数的具体实现放在类的实现部分。一般将说明部分放在头文件中,以供所有相关的应用程序共享。而实现部分放在与头文件同名的源程序文件中,便于修改,也可以将类的说明部分与类的实现部分放在同一个源程序文件中。需要注意的问题:
2、(1)class 是定义类的关键字,类名是用户自定义的标识符,用于标识用户所定义的类的名称。花括号内是类的说明部分。包括对类的数据成员和成员函数的声明。(2)类的成员通过关键字 public,protected,private 指定各成员的访问特性。(3)公有部分是类对外界的接口,类定义中一般应先说明类的公有部分。(4)类的任何成员都必须指定访问属性。通常将数据成员定义为私有或保护成员,以体现对数据的封装性;一般将成员函数定义为公有成员。班级:计算机 1班 姓名:闫婷婷学号:2010036118第 2 页 共 38 页 11:37:05 上午 5/5/2019(5)在类的定义中不能对数据成员进
3、行初始化(6)类的数据成员可以是 C+语法规定的任意数据类型,但不能用存储类型 auto,register,或 extern(7)类中的数据成员可以是其他类的对象,但不能以类自身的对象作为本类的成员。(8)类定义必须以分号结束(9)注意结构体与类的区别。2. 说明一个类的公有成员、保护成员和私有成员的区别。答:公有成员:用关键字 public 限定的成员称为公有成员,公有成员的数据或函数不受类的限制,可以在类内或类外自由使用;对类而言是透明的 ;保护成员:用关键字 protected 所限定的成员称为保护成员,只允许在类内及该类的派生类中使用保护的数据或函数。即保护成员的作用域是该类及该类的派
4、生类。私有成员:用关键字 priviate 限定的成员称为私有成员,对私有成员限定在该类的内部使用,即只允许该类中的成员函数使用私有的成员数据,对于私有的成员函数,只能被该类内的成员函数调用;类就相当于私有成员的作用域。 3.何时执行类构造函数及析构函数?若该对象作为类的成员,何时执行其构造函数和析构函数?答:构造函数的功能是在定义对象时被编译系统自动调用来创班级:计算机 1班 姓名:闫婷婷学号:2010036118第 3 页 共 38 页 11:37:05 上午 5/5/2019建对象并初始化对象。析构函数在对象生存期结束前由编译系统自动调用。构造函数:在建立类的对象时,构造函数被调用,用于
5、给对象分配空间和初始化。析构函数:类对象的生命期结束时,析构函数由系统自动调用,主要用于释放对象所占用的资源,如关闭构造函数所打开的文件或释放对象在堆中所占用的内存。 4. 创建一个 Employee 类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。其功能有修改姓名、显示数据信息。要求其功能函数的原型放在类定义中,构造函数初始化每个成员,显示信息函数要求把对象中的完整信息打印出来。其中数据成员为保护的,函数为公有的。#include #include class employee protected: char name10; / 姓名char street20; / 街道地址 c
6、har city10; / 市 char prov10; / 省 char post7; / 邮政编码 int no; / 记录序号 班级:计算机 1班 姓名:闫婷婷学号:2010036118第 4 页 共 38 页 11:37:05 上午 5/5/2019public: employee(char ,char ,char ,char ,char ,int); void changename(char str); void display(); ; employee:employee(char n,char s,char c,char p1,char p2,int num) strcpy(na
7、me,n); strcpy(street,s); strcpy(city,c); strcpy(prov,p1); strcpy(post,p2); no=num; void employee:changename(char n) strcpy(name,n); void employee:display() 班级:计算机 1班 姓名:闫婷婷学号:2010036118第 5 页 共 38 页 11:37:05 上午 5/5/2019cout;班级:计算机 1班 姓名:闫婷婷学号:2010036118第 10 页 共 38 页 11:37:05 上午 5/5/2019class Studentp
8、ublicvoid Student()void display()cin /没有分号class StudentPublic: /缺少冒号void Student(); /缺少分号void display() coutnumber;班级:计算机 1班 姓名:闫婷婷学号:2010036118第 11 页 共 38 页 11:37:05 上午 5/5/2019cout;class example()private:int date;static int countpublic;void example(int y=10)(date=y;)(cout /没有分号class example()priva
9、te:int date;static int countpublic: /是冒号,不是分号void example(int y=10) /是花括号date=y; /应该在函数体内coutclass Expublic:Ex(int x,char c=c);班级:计算机 1班 姓名:闫婷婷学号:2010036118第 13 页 共 38 页 11:37:05 上午 5/5/2019Ex()cout#include #include class Expublic:班级:计算机 1班 姓名:闫婷婷学号:2010036118第 15 页 共 38 页 11:37:05 上午 5/5/2019Ex(con
10、st char* s) len=strlen(s);p=new charlen+1;strcpy(p,s);Ex()p=new char8;coutclass MyClass班级:计算机 1班 姓名:闫婷婷学号:2010036118第 17 页 共 38 页 11:37:05 上午 5/5/2019public:MyClass();MyClass(int);void Display();MyClass();protected:int number;MyClass:MyClass()cout#include class Studentpublic:Student(char* pName =no
11、name)cout class Animal;void SetValue(Animalvoid SetValue(Animalclass Animalpublic:friend void setValue(Animalprotected:int itsWeight;int itsAge;void SetValue(Animalvoid SetValue(Animalta.itsAge=tn;void main()Animal peppy;SetValue(peppy,5);SetValue(peppy,7,9);修改为:#include class Animal;void SetValue(A
12、nimalvoid SetValue(Animalclass Animalpublic:friend void setValue(Animalprotected:int itsWeight;int itsAge;班级:计算机 1班 姓名:闫婷婷学号:2010036118第 25 页 共 38 页 11:37:05 上午 5/5/2019;void SetValue(Animalvoid SetValue(Animalta.itsAge=tn;void main()Animal peppy;SetValue(peppy,5);SetValue(peppy,7,9);15:将第 14 题程序中的友
13、元改成普通函数,为此增加访问类中保护数据的成员函数。#include class Animal;void SetValue(Animalvoid SetValue(Animal班级:计算机 1班 姓名:闫婷婷学号:2010036118第 26 页 共 38 页 11:37:05 上午 5/5/2019class Animalpublic:void Set(int v);void Set(int v, int w);protected:int itsWeight;int itsAge;void Animal:Set(int v) itsWeight = v; void Animal:Set(in
14、t v, int w) itsWeight=v; itsAge=w; void SetValue(Animal void SetValue(Animal void main()Animal peppy;SetValue(peppy, 5);SetValue(peppy,7,9);班级:计算机 1班 姓名:闫婷婷学号:2010036118第 27 页 共 38 页 11:37:05 上午 5/5/20191. 什么是继承?它在软件设计中有什么作用?继承:保持已有类的特性而构造新类的过程。使用继承可以实现代码重用。2. 比较类的三种继承方式之间的差别。直接基类: 直接参与新类派生的基类间接基类:
15、基类的基类或更高层的基类。单继承: 只有一个直接基类的继承。多继承: 同时有多个基类的继承。3. 如果派生类 B 已经重新定义了基类 A 的一个成员函数 fn1(),没有定义重载成员函数 fn2(),怎样调用基类的成员函数 fn1()、fn2()?调用方法为: A:fn1(); fn2();4. 写出运行结果,分析程序中的访问权限,并回答所列问题。#include class Apublic:void f1();A()班级:计算机 1班 姓名:闫婷婷学号:2010036118第 28 页 共 38 页 11:37:05 上午 5/5/2019cout“A Constructor“endl;i1
16、=10;j1=11;cout“i1=“i1“j1=“j1endl;A()cout“A Destructor“endl;protected:int j1;private:int i1;class B:public Apublic:void f2();B()cout“B Constructor“endl;i2=20;j2=21;cout“i2=“i2“j2=“j2endl;B()cout“B Destructor“endl;班级:计算机 1班 姓名:闫婷婷学号:2010036118第 29 页 共 38 页 11:37:05 上午 5/5/2019protected:int j2;private:
17、int i2;class C:public Bpublic:void f3();C()cout“C Constructor“endl;i3=30;j3=31;cout“i3=“i3“j3=“j3endl;C()cout“C Destructor“endl;protected:int j3;private:int i3;void main()班级:计算机 1班 姓名:闫婷婷学号:2010036118第 30 页 共 38 页 11:37:05 上午 5/5/2019A a;B b;C c;(1)派生类 B 中成员函数 f2()能否访问基类 A 中的成员 f1()、i1 和 j1?答:可以访问 基
18、类 A 的 f1()和 j1(2)派生类 B 的对象 b 能否访问基类 A 中的成员 f1()、i1和 j1?答:不能(3)派生类 C 中成员函数 f3()能否访问直接基类 B 中的成员 f2()、j2 和 i2?能否访问间接基类 A 中的成员 f1()、j1 和i1?答:能访问 f2()和 j2, 能访问 f1()和 j1, 不能访问 i1(4)派生类 C 的对象 c 能否访问直接基类 B 中的成员 f2()、i2 和 j2 呢?能否访问间接基类 A 中的成员 f1()、j1 和 i1?答:不能(5)根据上述结果总结继承中构造函数和析构函数的调用顺序。构造函数一开始构造时,总是要调用它的基类的构造函数,然后才开始执行其构造函数体,