C++期末复习

文章目录

  • 题型
    • 1、三个阅读程序
    • 2、三个问答
      • c++语言的特点
      • c++访问控制符特点
        • public
        • protected
        • private
      • 操控内存
    • 3、两题程序填空
    • 4、一道程序大题
  • 考点
    • 1.c++相对于c的改进
      • 联系
      • 区别
    • 2.面向对象程序设计主要特征
      • 抽象
      • 封装
      • 继承
      • 多态
    • 3.值传递
      • 值传递
      • 指针传递
    • 4.类的析构函数、成员函数、构造函数区别
      • 成员函数
      • 构造函数
      • 析构函数
    • 5.类的定义
    • 6.继承的概念和性质
    • 7.抽象类的概念
    • 8.派生类的概念
    • 9.静态多态和动态多态
      • 虚函数
      • 静态多态
      • 动态多态
    • 10.多重继承
    • 11.数组定义以及在内存中的分配
      • 静态数组
      • 动态数组
    • 12.类的静态成员
    • 13.动态链接库
    • 14.封装体
    • 15.指针以及使用
    • 其他

题型

1、三个阅读程序

2、三个问答

c++语言的特点

四个主要特点:抽象、封装、继承、多态
C++ 接口(抽象类) 描述了类的行为和功能,而不需要完成类的特定实现。封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用。类和对象体现了抽象和封装。

继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。从一个父类派生出多个子类,可以使子类之间有不同的行为,这种行为称之为多态。没有继承就没有多态,继承是多态的前提。

c++访问控制符特点

访问控制符: public、private 和 protected

public

能被本类的成员函数、友元函数、本类的对象、其派生类的成员函数调用。

protected

能被本类的成员函数、友元函数、其派生类的成员函数调用。

private

能被本类的成员函数、友元函数调用。

操控内存

c++新增了new 和 delete字段,new 用来动态分配内存,delete 用来释放内存。
它们可以使用C++的一些新特性,最明显的是可以自动调用构造函数和析构函数。
最好不要和C语言中 malloc()、free() 一起混用。

3、两题程序填空

4、一道程序大题

考点

1.c++相对于c的改进

联系

C++是C的超集,兼容大部分C的语法的结构。

区别

C C++
思想 面向过程 面向对象
动态管理内存 malloc/free函数 new/delete关键字
数据类型 struct class
默认访问修饰符 public private
变量的默认链接属性 内链接 外链接
数组 静态数组 动态数组
其他 重载、引用

2.面向对象程序设计主要特征

四个主要特点:抽象、封装、继承、多态

抽象

C++ 接口(抽象类) 接口描述了类的行为和功能,而不需要完成类的特定实现。
类体现了抽象。

封装

封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用。
对象体现了封装。

继承

继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。

多态

从一个父类派生出多个子类,可以使子类之间有不同的行为,这种行为称之为多态。
没有继承就没有多态,继承是多态的前提。

3.值传递

值传递

形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

指针传递

形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作

4.类的析构函数、成员函数、构造函数区别

成员函数

类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。

class Line
{
   public:
      double length; 
      double getVolume(void)
      {
         return length;
      }
};

构造函数

类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。
不会返回任何类型,也不会返回 void。
先基类调用,再到派生类

// 成员函数定义,包括构造函数
Line::Line(void)
{
    cout << "Object is being created" << endl;
}

析构函数

类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。
调用构造函数的顺序和调用析构函数的顺序相反
先派生类调用,再基类调用

Line::~Line(void)
{
    cout << "Object is being deleted" << endl;
}

5.类的定义

类(Class)是面向对象程序设计实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。

class  类名{
访问范围说明符:
    成员变量

访问范围说明符:
    成员函数声明
    ...
};

成员函数的实现可以位于类的定义之外,格式如下:

返回值类型  类名:函数名()
{
    函数体
}

定义类之后,就可以定义对象了。定义对象的基本方法如下:

类名  对象名;

例子:

#include <iostream>
using namespace std;
class CRectangle
{
public:
    int w, h; //成员变量,宽和高
    void init( int w_,int h_ ); //成员函数,设置宽和高
    int area(); //成员函数, 求面积
}; //必须有分号
void CRectangle::init( int w_,int h_ )
{
    w = w_;  h = h_;
}
int CRectangle::area()
{
    return w * h;
}

int main( )
{
     int w,h;
     cin >> w >> h;
     r.init( w,h);
     cout << "It's area is " << r.area() << endl;
     return 0;
}

6.继承的概念和性质

继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。

这样做,也达到了重用代码功能和提高执行效率的效果。

7.抽象类的概念

C++ 使用抽象类来实现接口,接口描述了类的行为和功能,而不需要完成类的特定实现。

#include <iostream>
using namespace std;
// 基类
class Shape 
{
public:
   // 提供接口框架的纯虚函数
   virtual int getArea() = 0;
protected:
   int width;
   int height;
};
 
// 派生类
class Rectangle: public Shape
{
public:
   int getArea()
   { 
      return (width * height); 
   }
};

8.派生类的概念

超类/父类/基类=>子类/派生类
在构建新类的过程中,新建立的类被称为“子类”或者“派生类”;而被继承的包含相同特征的类称为“父类”或者“基类”。 派生类继承了基类的全部成员,并且可以增加基类所没有的数据成员和成员函数,以满足描述新对象的需求。

9.静态多态和动态多态

虚函数

虚函数,是指被virtual关键字修饰的成员函数。
定义一个函数为虚函数,不代表函数为不被实现的函数,而是为了允许用基类的指针来调用子类的这个函数。

静态多态

静态多态就是在系统编译期间就可以确定程序执行到这里将要执行哪个函数。
例如:函数的重载,对象名.操作符 执行成员函数等。

动态多态

动态多态利用虚函数实现了运行时的多态。
基类定义虚函数,在子类中重写基类函数,再定义一个指向基类对象的指针,然后使该指针指向由该基类派生的子类对象,再然后用这个指针来调用改虚函数,就能实现动态多态。

10.多重继承

多重继承指的是一个类可以同时继承多个类

class BaseC: public BaseA, public BaseB{
	...
};

11.数组定义以及在内存中的分配

数组是在内存中连续存储的具有相同类型的一组数据的集合。元素可通过数组索引访问, 最低地址对应于第一个元素,最高地址对应于最后一个元素。
静态数组名用sizeof可以知道数组实际所占的内存大小,而指向数组的指针占用空间即为普通指针的大小。当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

静态数组

静态初始化:给出初始化值,由系统决定长度。

  char ch[]="hello";

动态数组

动态初始化:只指定长度,由系统给出初始化值;

int* Dynamic_Arr3 = new int[size]();     //默认的初始化;

分配一个动态数组,返回一个T类型的指针,指针指向的是数组的第一个元素。
指针导致了动态数组中size可以取0,即返回一个空指针。分配一个空动态数组是合法的。

12.类的静态成员

我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。

13.动态链接库

库是写好的现有的,成熟的,可以复用的代码。

静态库与汇编生成的目标文件一起链接为可执行文件。

静态库的两个问题:空间浪费,更新麻烦。

动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例,规避了空间浪费问题。
动态库在程序运行时才被载入,也解决了静态库对程序的更新、部署和发布页会带来麻烦。用户只需要更新动态库即可,增量更新。

14.封装体

所有的 C++ 程序都有以下两个基本要素:

  • 程序语句(函数):程序中执行动作的部分。
  • 程序数据(成员对象):数据是程序的信息,会受到函数影响。

封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。
数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。

15.指针以及使用

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。
使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。

其他

1、

#include <iostream>
using namespace std;

后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。
因此,当使用时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现.

所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
当使用< iostream >的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。

你可能感兴趣的:(其他,c++,开发语言)