考试题型:主要在选择题、填空题、程序填充题、程序分析题、程序设计题,比分占18%左右。
1、构造函数的作用:初始化,为成员变量赋初值。构造函数是类的特殊成员函数,如果没有编写类的构造函数,则由系统自动添加一个不带参数的构造函数,即为默认构造函数。
构造函数没有返回值
2、定义构造函数:构造函数的名字应与类同名。并在定义构造函数时不能指定返回类型,即使void类型也不可以。构造函数允许重载。在类体外定义构造函数有三种形式:
假设类的成员变量是x1,x2,……,xn
(1)形式一:
类名::类名(形参1,……,形参n):x1(形参1),……,xn(形参n)
(2)形式二:
类名::类名(形参1,……,形参n)
{
x1 = 形参1;
……
x2 = 形参n
}
(3)形式三:
类名::类名()
{
x1 = 初始化表达式1;
……
Xn = 初始化表达式n;
}
以上三种形式可以混合使用。
3、构造函数的使用:
当程序创建一个对象时,系统自动调用构造函数来初始化对象。
如果创建对象提供了实参,则使用实参为对象成员变量赋值;如果没有提供实参,则使用默认值为对象的成员变量赋值。
(1)使用构造函数创建对象指针
MyDate *pd = new MyDate();
MyDate *pd1 = new MyDate();
(2)对象数组
对象数组的每一个元素都是一个对象,一定要为对象所属定义一个无参的构造函数,每一个数组元素都要调用构造函数。
例:以类MyDate为例
MyDate a[3]; //此时调用无参的构造函数3次,为数组A的3个元素进行初始化。
(3)复制构造函数
也叫拷贝构造函数,作用是:利用已有的对象来建立一个新的对象,复制构造函数只有一个参数,参数类型是本类的引用,可以使const引用,也可以是非const引用,也可以两个都存在。
如果类中没有给出复制构造函数,编辑器会自动生成一个复制构造函数。
格式为:
A::A(const A&)或A::A(A&)
1、析构函数:也是成员函数的一种,名字与类名相同,但要在类名前加上一个“~”字符。
例:~point( ){ };
析构函数没有参数,也没有返回值。
2、一个类中仅一个析构函数,对象在消亡时自动调用析构函数,析构函数的作用是处理一些善后工作,如释放占用的空间。执行析构函数的顺序与执行构造函数正好相反。
1、静态变量
可以使用static说明自动变量,分为静态全局变量和静态局部变量。
(1)全局变量:在所有花括号之外声明的变量,在整个项目文件内都有效。使用static修饰的全局变量是静态全局变量,仅在该文件内有效。
(2)局部变量:块内定义的变量,static修饰的静态局部变量,在整个运行期间都存在,仅在定义的块中有效。
(3)静态变量只执行一次初始化,如果未显示初始化,相当于初始化为0。
2、类的静态成员:静态成员变量、静态成员函数
(1)在类体内定义类的成员,在前面添加static关键字
(2)类的静态成员被类的所有对象共享,不论有多少对象,静态成员都只有一份保存在公用内存中
(3)在类定义中声明静态成员变量,必须在类体外定义静态成员变量的初值,不能在类体内赋初值。
格式为:
类型 类名::静态成员变量 = 初值;
(4)注意:在类体外给静态成员赋初值不能加static
(5)访问静态成员时,成员前面可以使用类名、对象名或者指针名作前缀
(6)类的静态成员函数没有this指针
(7)不能在静态成员函数中访问非静态成员
1、变量的生存期是指变量所占据的内存空间由分配到释放的时期。
变量的幼小范围为其作用域。
全局变量:全局变量及静态变量分配的空间在全局数据区,生存期为整个程序的执行期间。
局部变量:在函数内或程序块内说明的变量,被分配到局部数据区,如栈区,这种分配是临时的。
2、类的对象在生成时调用构造函数,在消亡时调用析构函数,在这两个函数之间即是对象的生存期。
使用new运算创建的变量,具有动态生存期。
从声明处开始,直到用delete运算符释放存储空间或程序结束时,变量生存期结束。
3、作用域
全局域:全局域包括程序作用域和文件作用域
局部域:类作用域、函数作用域、块作用域和函数原型作用域
1、const修饰的各种情况
常量:使用const修饰的量称为常量
类的常量成员变量:使用const修饰的类成员变量,只能通过构造函数的成员初始化列表进行初始化。
一般格式 const 数据类型 常量名 = 表达式;
常量对象:定义类的对象是使用const修饰
一般格式 类型说明符 函数名(参数)const;
对于常量对象只能调用常量函数,常量对象各属性值不能修改。
通过常量对象仅可调用常量成员函数,是因为常量成员函数确保不会修改任何费静态成员变量的值
类中定义的const成员变量必须在构造函数的初始化列表中进行初始化
2、const修饰指针变量
(1)唯一的const位于*左侧,表示指针所指数据是常量,数据不能通过指针改变,但指针本身是变量。
例:int const *p
(2)唯一的const位于*右侧,表示指针本身是常量,指针不能指向其他内存地址,指针所指的数据可以通过指针修改 。
例:int * const
(3)*左右各一个const,表示指针和指向的都是常量,都不能改
1、概念
一个类的成员变量如果是另一个类的对象,则该成员变量称为成员对象,包含成员对象的类叫做封闭类。
2、封闭类构造函数初始化列表
(1)对于成员对象,初始化列表的“参数表”中列出的成员对象构造函数(指明了该成员对象如何初始化)
例:
Person(string n,string g,int y,int m,int d):name(n),gender(g),birth(y,m,d){}
(2)封闭类生成对象时,先执行所有成员对象的构造函数,然后执行封闭类的构造函数,成员对象构造函数与在勒种定义的顺序一致,析构函数的调用则相反。
3、封闭类对象生成时,先执行所有对象的构造函数,然后执行封闭类自己的构造函数。成员对象构造函数的执行次序与成员对象在类中的说明次序一致,与他们在构造函数初始化列表中出现的次序无关。
当封闭类消亡时,先执行封闭类的析构函数,然后再执行成员对象的析构函数。
1、概念
类很好地实现了封装和隐藏,一个类里的私有成员和保护成员只能由类内部的成员函数访问,外部不能通过对象直接访问。但有时为了提高编程效率,需要允许一个函数或类访问另一个类中的私有成员或保护成员,这时可将这些类或函数声明为类的友元。友元函数不是类的成员函数,在函数体中使用“对象名.对象成员名”
friend <返回值类型><函数名><参数表>;
2、现在设计复数类myComplex,类中的对象表由实部real和虚部imag构成的复数。类中实现复数的加法操作和复数的输出。为了对比分别以成员函数和友元函数实现。
3、友元类
友元类在被访问的类中的声明格式:friend<类名>;友元类的关系是单向的,不能传递。
1、概念
C++规定,当调用一个成员函数时,系统自动向它传递一个隐含的参数,该参数是一个指向调用该函数的对象的指针,称为this指针。
因为静态成员函数是类具有的属性,并不作用于某个对象,其内部不能使用this指针。
例:
myDate::myDate(int year,int month,int day)
{
this->year = year;
this->month = month;
this->day = day;
}
一、选择题
1-5、CAABD 6-10、ABBCB 11-12、DC
二、填空题
(1)复制构造函数 (2)一个 (3)本类对象的引用 (4)构造函数 (5)析构函数
(6)~point()(7)无关 (8)const (9)X (10)成员对象的构造函数
(11)friend void B::fun() (12)友元函数 (13)对象
三、程序填空题
1、
friend float
cout<
2、
friend void print(point)
print(a)
3、
public
A.init(5,9)
4、
int Test::num=5
t.show()
5、
a.f1()
6、
A(int x=0,int y=0)
{
a = x;
b = y;
}
四、程序分析题
1、
1,9
50,30
2、
1,2
3、
6
2
4、
7 8
3 3
1 1
7 3
4 4