C++ 知识快速回顾

2019-04-02  本文已影响0人  胡天九月即飞雪

一. 引用

1. 引用与指针的区别

2. 引用的作用

二. const和define的区别

三. 封装

四. 拷贝构造函数

Point P4(P1); <=> Point P4 = P1;

五. static

静态数据成员与全局变量

静态成员与非静态成员

六. 友元

优缺点

在需要允许某些特定的非成员函数访问一个类的私有成员(及受保护成员),而同时仍阻止一般的访问的情况下,友元是可用的。

优点:

    可以灵活地实现需要访问若干类的私有或受保护的成员才能完成的任务;

    便于与其他不支持类概念的语言(如[C语言](http://lib.csdn.net/base/c "C语言知识库")、汇编等)进行混合编程;

    通过使用友元函数重载可以更自然地使用C++语言的IO流库。

缺点:

    一个类将对其非公有成员的访问权限授予其他函数或者类,会破坏该类的封装性,降低该类的可靠性和可维护性。

七. 继承

不显式声明继承方式,默认是private(私有继承)

1. 派生类的构成

(1) 接收基类成员 对基类所有成员无选择无条件接收,但不包括基类的构造函数和析构函数
(2) 改造基类成员 重写覆盖
(3) 添加新的成员

2. 继承中的访问控制

保护基类成员 在派生类中的访问属性
公有成员 public 公有成员 public
保护成员 protected 保护 protected
私有成员 private 不可访问
私有基类成员 在派生类中的访问属性
公有成员 public 私有 private
保护成员 protected 私有 private
私有成员 private 不可访问
保护基类成员 在派生类中的访问属性
公有成员 public 保护 protected
保护成员 protected 保护 protected
私有成员 private 不可访问

3. 派生类的构造函数

(1)单继承的构造函数

先构造基类,再根据基类构造派生类
派生类名(参数总表):基类名(基类构造函数参数表)
Student(int number, char name[], char sex) : Person(name,sex)

(2)组合单继承的构造函数

先初始化基类,再初始化内嵌对象,最后初始化派生类
*Student(int number, char name[], char sex, char s_name[], char city[]) : Person(name,sex), school(s_name,city), number(number)
其中Person是Student的基类,school是内嵌School的对象,number是Student类的新成员

(3)多继承的构造函数

派生类名(参数总表):基类1名(基类1构造函数参数表),基类2名(基类2构造函数参数表),... , 基类n名(基类n构造函数参数表)

影响多重继承基类构造函数调用函数顺序的是派生类定义时的继承列表
派生类构造函数的执行顺序

4. 派生类的析构函数

先执行派生类的析构函数,再调用内嵌对象的析构函数,最后调用基类的析构函数

5. 继承中的同名成员访问

类名::成员
多重继承对同名访问造成了困难,而且使得同一成员在内存中具有多个拷贝,增加了不必要的内存开销,因为在实际使用中没有必要占用两分内存(虚基类解决这些问题)

6. 虚基类

class 派生类名:virtual [继承方式] 基类名

7. 基类与派生类的转换

任何需要基类对象的地方,都可以用公有派生类的对象来代替

8. 类与类的关系

关系 联系
组合 has-a 整体与部分的关系
继承 is-a 特殊与一般的关系
使用 uses-a 类对象作为参数

八. 多态

多态性:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数

1. 虚函数

虚函数的作用:允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或者基类引用来访问这个同名函数
virtual 函数类型 函数名(参数列表)

2. 纯虚函数

纯虚函数是在声明虚函数时被"初始化"为0的函数,他的一般形式为:
virtual 函数类型 函数名(参数列表)= 0;

纯虚函数没有函数体,与空函数体的函数有着本质的区别,纯虚函数中的 = 0只起形式上的作用

上一篇下一篇

猜你喜欢

热点阅读