自考2019版《C++程序设计》04747,第三章类的对象进阶(附课后习题答案)

考试题型:主要在选择题、填空题、程序填充题、程序分析题、程序设计题,比分占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<类名>;友元类的关系是单向的,不能传递。


第八节 this指针(难点)

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<<max(a,b)

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

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yuuuuuuling

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值