1、考试题型及分数分布 单项选择题(10%)填空题(20%)读程序写结果(30%)程序填空题(20%)程序设计题(20%),课程内容总结,第一章 绪论 第二章 C+简单程序设计 第三章 函数 第四章 类与对象 第五章 数据的共享与保护 第六章 数组、指针与字符串 第七章 继承与派生 第八章 多态性,第一章 绪论,1、面向对象程序设计的特点 2、类、对象概念 3、程序开发的基本过程,第二章 C+简单程序设计,1、C+特点 2、C+程序结构 3、标识符、数据类型、常量、变量、表达式 4、C+语句 5、数据输入输出(cin、cout),第三章 函数,1、函数的定义和调用、函数原型 2、函数间的参数传递(
2、引用传递) 3、内联函数 4、带默认形参值的函数 5、函数重载,第四章 类与对象,1、类的定义(成员类型、访问属性) 2、对象的创建 3、对象成员的访问 4、构造函数与析构函数(作用、特点) 5、类的组合(包含对象的初始化),第五章 数据的共享与保护,1、标识符的作用域与可见性 2、生存期 3、类的静态成员,第6章 数组、指针与字符串,1、 对象数组 2 、对象指针 3 、动态内存分配 4 、字符串 5 、深复制与浅复制,第7章 继承与派生,1、 类的继承与派生 2、 访问控制 3、 派生类的构造函数和析构函数,第8章 多态性,1、 多态性概述 2、 运算符重载 3、 虚函数,例题:单项选择题
3、,1、在下列关键字中,用以说明类中公有成员的是( ) A. public B. private C. protected D. friend 2、下列的各类函数中,( )不是类的成员函数。 A. 构造函数 B. 析构函数 C . 友元函数 D. 拷贝初始化构造函数 3、作用域运算符的功能是( )。 A. 标识作用域的级别的 B. 指出作用域的范围的 C. 给定作用域的大小的 D. 标识某个成员是属于哪个类的 4、( )不是构造函数的特征。 A. 构造函数的函数名与类名相同; B. 构造函数可以重载; C. 构造函数可以设置缺省参数; D. 构造函数必须指定类型说明。 5、( )是析构函数的特征
4、。 A. 一个类中只能定义一个析构函数; B. 析构函数与类名不同; C. 析构函数的定义只能在类体内; D. 析构函数可以有各个或多个参数。,例题:单项选择题,6友元的作用()。 A. 提高程序的运用效率; B. 加强类的封装性; C. 实现数据的隐藏性; D. 增加成员函数的种类。 7下列对派生类的描述中,( )是错的。 A. 一个派生类可以作另一个派生类的基类; B. 派生类至少有一个基类; C. 派生类的成员除了它自己的成员外,还包含了它的基类的成员; D. 派生类中继承的基类成员的访问权限到派生类保持不变。 8派生类的对象对它的基类成员中( )是可以访问的。 A. 公有继承的公有成员
5、; B. 公有继承的私有成员; C. 公有继承的保护成员; D. 私有继承的公有成员。 9. 关于动态联编的下列描述中,( )是错误的。 A. 动态联编是以虚函数为基础的; B. 动态联编是在运行时确定所调用的函数代码的; C. 动态联编调用函数操作是指向对象的指针或对象引用; D. 动态联编是在编译时确定操作函数的;,例题:填空题,1C+中定义虚函数所用的关键字是_。 2C+中进行输入、输出操作时,将数据对象从输入流提取出来的运算符是_,插入到输出流的运算符是_。 3类的继承是指子类继承基类的_和成员函数。 4不同对象可以调用相同名称的函数,但可导致完全不同的行为的现象称为_。 5设在程序中
6、使用如下语句申请了一个对象数组:Point * ptr = new Point2;则在需要释放ptr指向的动态数组对象时,所使用的语句是_ _。 6在保护派生中,基类权限为Private的成员在派生类中_ 。 7C+中多态性包括两种多态性: _和 _ 。前者是通过函数重载实现的,而后者是通过 _和 _来实现的。 8在继承机制下,当对象产生时,编译系统先执行 _的构造函数,然后再执行 _的构造函数,最后才执行 _的构造函数。,#include class A public:void Show() cout“A:Shown“; ; ; class B : public A public:void
7、Show() cout“B:Shown“; ; void Display() Show(); ; ; void main() A a;B b;a.Show(); b.Show(); b.Display(); ,例题:读程序写结果,#include using namespace std; class A public:void fun(int i)cout“A.i=“iendl; ; class B : public A public:void fun(int j)cout“B.j=“jendl; ;,例题:读程序写结果,int main() A a;B b;A *p;p= ,#include
8、 using namespace std; class A public:virtual void fun(int i)cout“A.i=“iendl; ; class B : public A public:void fun(int j)cout“B.j=“jendl; ;,例题:读程序写结果,int main() A a;B b;A *p;p= ,例题:程序填空题,#includeusing namespace std;class complex public: int real;int imag;complex(int r=0,int i=0) real=r;imag=i;_;;,com
9、plex operator+(_,complex& b)int r=a.real+b.real;int i=a.imag+b.imag;return ;void main( )complex x(1,2),y(3,4),z;z=x+y;coutz.real+z.imagi endl; ,例题:程序设计题,编写一个程序,声明抽象基类Point,由它派生出3个派生类:Line(直线)、Triangle(三角形)、Rectangle(矩形),用一个函数Perimeter分别输出以上三者的边长,3个图形的数据在定义对象时给定。,#include #include /using namespace st
10、d; /定义抽象基类Point class Point public:virtual double perimeter() =0;/纯虚函数 ; /定义Line类 class Line:public Point public:Line(float a, float b, float c, float d): x1(a), y1(b), x2(c), y2(b)/构造函数 virtual double perimeter() return sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); /定义虚函数 protected:float x1, y1, x2, y2; /定义
11、端点坐标 ;,例题:程序设计题,class Triangle: public Point public:Triangle(float a, float b, float c, float d, float e, float f): x1(a), y1(b), x2(c), y2(d), x3(e), y3(f); /构造函数 virtual double perimeter() /定义虚函数 double L12, L23, L31;L12= sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);L23= sqrt(x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)
12、;L31= sqrt(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3);return L12+L23+L31; ; protected:float x1, y1, x2, y2, x3, y3;/定义端点 ;,例题:程序设计题,class Rectangle:public Point /定义Rectangle类 public:Rectangle(double w,double h):width(w),height(h)/构造函数virtual double perimeter () return 2*(width+height);/定义虚函数 protected:double width,height;/定义宽与高 ; int main() Line line(1.5, 2.5, 6.6, 9.8);/建立Line类的对象lineTriangle triangle(4.5,8.4, 2, 3, 5, 6); /建立三角形类的对象triangleRectangle rectangle(4.5,8.4);/建立矩形类对象rectanglePoint *p;p= ,