c++复习大纲
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《面向对象的编程技术》复习大纲
1、内联函数的概念及语法形式
内联函数是功能比较简单的函数,结构简单、语句少,不包含循环语句,频繁被调用,不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处,这样就节省了参数传递、控制转移等开销。
语法形式:inline 类型说明符函数名(形参表){函数体}
2、类与对象的定义及使用(注意编程题)
(1) 类的成员属性的含义
class 类名称
{
public:
公有成员(外部接口)
private:
私有成员
protected:
保护型成员
}
(2) 如果紧跟在类名称的后面声明私有成员,则关键字private可以省略。
(3) 类的对象是该类的某一特定实体,即类类型的变量。
(4) 使用“对象名. 成员名”方式访问public 属性的成员
3、函数重载的含义及用法(参考习题8-5)
(1) C++允许功能相近的函数在相同的作用域内以相同函数名声明,从而形成重载。
方便使用,便于记忆。
(2) 重载函数的形参必须不同: 个数不同或类型不同。
4、构造函数的特征:
(1) 构造函数的函数名与类名相同(2) 构造函数可以重载
(3) 构造函数可以设置默认参数(4) 构造函数在对象被创建的时候将被自动调用
(6) 构造函数不能被派生类继承
(7) 构造函数可以重载,析构函数不能重载
(8) 析构函数:在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。
如果程序中未声明析构函数,编译器将自动产生一个不做任何事情的默认的析构函数。
5、拷贝构造函数的特征:
(1) 具备一般构造函数的所有特性(2) 其形参是本类的对象的引用,其作用是使用一个已存在的对象(由拷贝构造函数的参数指定),去初始化同类的一个新对象
(3) 默认的拷贝构造函数的功能:把初始值对象的每个数据成员的值复制到新建立的对象中
(4) 定义形式:类名(类名&对象名){ }
(5) 拷贝构造函数在以下三种情况下会被调用:
A.当用类的一个对象去初始化该类的另一个对象时;
B.如果函数的形参是类的对象,调用函数时,进行形参和实参结合时;
C.如果函数的返回值是类的对象,函数执行完成返回调用时。
(参考例题:4-2)
6、友元的概念
(1) 友元函数:在类中使用关键字friend 修饰的非成员函数,在它的函数体中可以通过对象名访问类的私有和保护成员(参考例题:5-6);
(2) 友元类:如果类A被说明成类B的友元,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员。
7、类的静态成员(static修饰)
(1) 静态数据成员:该成员为整个类所共有,不属于任何一个具体对象,在每个类只有一个拷贝,由该类的所有对象共同维护和使用,从而实现了同一个类的不同对象之间的数据共享;
静态数据成员具有静态生存期,只能通过类名对它进行访问,一般的用法是“类名::标识符”,其初始化一般在类外使进行。
(参考例题:5-4);(2) 静态函数成员:该成员为整个类所共有,由该类的所有对象共同维护和使用,对于公有的静态函数成员,可以通过类名或对象名来调用。
而非静
态函数成员只能通过对象名来调用。
静态函数成员可以直接访问该类的静态数据和函数成员,而访问非静态数据成员必须通过参数传递方式得到对象名,然后通过对象名来访问(参考例题:5-5)。
另外,静态函数成员没有this 指针。
8、引用的表示及含义(参考例题:3-12)
引用是一种特殊类型的变量,可以被认为是另一个变量的别名。
int i,j;
int &ri=i; //建立一个int型的引用ri,并将其初始化为变量i的一个别名j=10;
ri=j;//相当于i=j;
9、运算符重载(重点,注意编程题,以双目运算符重载为主) (参考例题:8-1,8-3)
(1) 不能重载C++运算符在有:类属关系运算符“.”,成员指针运算“.*”,作用域分辨符“::”,sizeof运算符和三目运算符“?:”
(2) 运算符重载的两种形式
A、类的成员函数形式
函数类型operator 运算符(形参表)
{函数体}
B、类的友元函数形式
friend 函数类型operator 运算符(形参表)
{函数体}
(3)重载一个运算符时,该运算符的优先级和结合性以及操作符的个数不允许改变。
(4)单目运算符重载时,注意参数个数的变化
10、多继承时派生类构造函数执行的次序:(参考例题:7 -5)
(1) 调用基类构造函数,调用顺序按照它们被继承时声明的顺序(从左到右);
(2) 调用内嵌成员对象的构造函数,调用顺序按照它们在类中声明的顺序;
(3) 派生类的构造函数体中的内容。
11
12、MFC及API的含义
13、Windows系统也叫做事件驱动的系统。
当用户按下一个键、移动或单击鼠标时,计算机通知Windows系统已经发生了一个事件,以及事件的种类、发生的时间、发生的位置。
14、C++中如何用类向导创建类,会产生哪些文件?
15、分析程序结果:
(1)
#include <iostream.h>
class B
{
int x1,x2;
public:
void Init(int n1,int n2){x1=n1;x2=n2;}
int inc1(){return ++x1;}
int inc2(){return ++x2;}
void disp(){cout<<"B,x1="<<x1<<",x2="<<x2<<endl;}
};
class D1:private B
{
int x3;
public:
D1(int n3){x3=n3;}
void Init(int n1,int n2){B::Init(n1,n2);}
int inc1(){return B::inc1();}
int inc2(){return B::inc2();}
int inc3(){return ++x3;}
void disp(){cout<<"D1,x3="<<x3<<endl;} };
class D2:public B
{
int x4;
public:
D2(int n4){x4=n4;}
int inc1()
{
int temp=B::inc1();
return B::inc1();
}
int inc4(){return ++x4;}
void disp(){cout<<"D2,x4="<<x4<<endl;} };
void main()
{
B b;
b.Init(1, 2);
b.disp();
D1 d1(4);
d1.Init(5,5);
d1.inc1();
d1.disp();
D2 d2(3);
d2.Init(-4, -4);
d2.disp();
}
(2)
#include<iostream.h>
class B1
{public:
B1(int i) {cout<<"constructing B1:"<<i<<endl; }
};
class B2
{ public:
B2(int j) {cout<<"constructing B2:" <<j<<endll;}
};
class B3
{ public
B3( ) {cout<<"constructing B3 *"<<endl;}
};
class C :public B2 ,public B1 ,public B3
{ public:
C(int a, int b ,int c ,int d): B1(a) ,member B2(d),member B1(c) ,B2(b) { } private:
B1 member B1;
B2 member B2;
B3 member B3;
};
void main( )
{ c .obj(1 ,2 ,3 ,4);。