C++复试第五篇:类

目录

一、定义抽象数据类型

二、访问控制和封装

三、类的其他特性


一、定义抽象数据类型

1. 类的基本思想

        数据抽象:定义数据成员和函数成员的能力

        封装:分离类的实现与接口,保护类的成员不被随意访问的能力

2. 抽象数据类型:封装了实现细节的数据结构

    数据抽象

3. 在成员函数内部,可以随意调用该函数的对象的成员,想当于this的隐式引用

    但是在类的外部定义成员函数,就必须包含它所属的类名    

4. 构造函数:初始化类对象的数据成员,且没有返回类型

     当类没有声明任何构造函数时,编译器才会自动地生成默认构造函数

5. 无法使用默认构造函数的几种原因:

        (1) 已经定义了其他的构造函数,且没有单独声明一个默认构造函数

        (2) 自动合成的默认构造func可能会执行错误的操作

        (3) 编译器不能为某些类合成默认的构造函数

   

二、访问控制和封装

1.  使用访问控制说明符加强类的封装性:

        ◇ 定义在public之后的成员,在整个程序内可以被访问,public成员定义类的接口

        ◇ 定义在private之后的成员,可以被类的成员函数访问,被隐藏了

2. struct默认访问权限是public的(都有u),class默认访问权限是private的,其他无区别

3. 封装是什么?有什么用处?

        封装是实现与接口的分离。它隐藏了类型的实现细节。(在C++中,封装是通过将实现放在一个类的私有部分来实现的)

         封装有两个重要的优点:
        ◇ 确保用户代码不会无意间破坏封装对象的状态;
        ◇ 被封装的类的具体实现细节可以随时改变,而无须调整用户级别的代码。

4.  

友元friend在什么时候有用?怎么定义请分别举出使用友元的利弊。

        类可以允许其他类或者函数访问它的private成员,方法是令其他类或者函数成为它的友元friend函数,必须在类定义内声明
        优点:
                外部函数可以方便地使用类的成员,而不需要显示地给它们加上类名;
                可以方便地访问所有非公有成员;
                有时,对类的用户更容易读懂。
        缺点:
                减少封装和可维护性;
                代码冗长,类内的声明,必须要在类外声明该函数/类(最好类外再另外声明不强制要求)

5. 声明重载函数为friend,要每个版本都声明一遍

6. 类的引用const成员必须初始化

三、类的其他特性

1. 内联函数inline

        函数调用是有时间和空间开销的。程序在执行一个函数之前需要将实参、局部变量、返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码;函数体中的代码执行完毕后还要清理现场,将之前压入栈中的数据都出栈,才能接着执行函数调用位置以后的代码。

        如果函数只有一两条语句,那么大部分的时间都会花费在函数调用机制上,这种时间开销就就不容忽视。

        为了消除函数调用的时空开销,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数

2. 聚合类:满足

        (1)所有成员都是public的 (2)没有定义任何构造函数

        (3)没有类内初始值          (4)没有基类和virtual函数

3. 

什么是类的静态成员?它有何优点?静态成员与普通成员有何区别?

        (1)类的静态static成员,static只能出现在类内。可以是public/private,也可以是常量/引用/指针/类类型。 类的静态成员与类本身直接相关,而不是与类的各个对象保持关联。
        (2)每个对象不需要存储公共数据,如果数据被改变,则每个对象都可以使用新值。
        (3)静态数据成员可以是不完全类型;可以使用静态成员作为默认实参。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值