C++重难点整理
-----有问题请及时联系笔者修改鸭~
第一章
- 在C++中,通过重载和虚函数来实现多态性。
- C++是一种面向对象和面向过程相结合的语言。
第二章
- 内联函数的定义需要在函数的返回值类型前面加关键字
inline
。 - 在堆中通过
new
运算符创建的对象,其生存期为动态生存期。 - 在函数代码少、频繁调用的情况下适宜采用
inline
定义内联函数。
第三章
-
类中数据成员的生存期由对象决定。
-
构造函数可以重载,析构函数不能重载。
-
拷贝构造函数的调用:
- 用一个对象去初始化同类的另一个对象。
- 函数的形参是类的对象,调用函数进行形参和实参相结合。
- 函数的返回值是类的对象,函数执行返回调用时。
-
假设Cls是类,类的拷贝构造函数声明语句:
Cls(Cls &p);
-
类有几个对象,就调用几次构造函数,几次析构函数(多用于数组有n个成员,调用n次时)。
-
不能在类定义时对类中的数据成员进行初始化【这个应该指的是静态数据成员叭…】
第四章
-
友元的作用是提高程序的运行效率。
-
静态数据成员在对象调用析构函数后,不会从内存中撤销。
-
类A是类B的友元,类B不一定是类A的友元。
-
友元函数的实现不一定要在类的内部定义;
友元函数不是类的成员函数;
友元函数可以访问类的私有成员;
友元函数破坏了类的封装性和隐藏性。
-
常量数据成员必须被初始化,并且不能更新。
-
不管是类的成员函数,还是常量成员函数,都可以操作常量对象。
-
常量对象只能调用类的常量成员函数。
-
类A是类B的友元,类B是类C的友元,类A的成员函数可以访问类B的任何成员,类B的成员函数可以访问类C的任何成员。
-
类的静态成员函数不能访问类的非静态成员。
-
非静态数据成员不能在类外初始化。
第五章
-
派生类的对象只能访问基类成员中的公有继承的公有成员,公有继承的保护成员不行。【???不对劲】
-
内嵌对象???
-
多重继承的二义性:
- 一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性。
- 解决二义性最常用的方法是对成员名的限定。
- 基类和派生类中出现同名函数,不存在二义性(同名覆盖)。
-
公有继承的基类中的private成员在基类中仍是private的。
-
C++中虚函数能被派生类继承。
-
解决二义性问题的方法有:使用作用域分辨操作符或虚基类(差不多就是虚继承)。
-
不能将派生类的对象赋给指向基类的指针。
第六章
-
在重载一个运算符时,其参数表中没有任何参数,这表明该运算符时作为成员函数重载的单目运算符。
-
三目运算符不可以重载。
-
虚函数要在函数说明时定义。【???】
必须在声明里面定义,至于实现在声明以及实现文件都可以,虚函数是必须在类里面定义的,只有类才有虚函数。
-
派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型。
-
运行时的多态——虚函数【应该是纯虚函数吧】。
-
抽象类的特性——不能定义其对象。
-
动态关联是运行时确定操作函数的。
Person *p = &s;
Person &p = s;
p = s;
-
动态关联调用虚函数操作是通过指向对象的指针或对象引用的。
-
虚函数在类外定义,不需要加
virtual
关键字【???究竟是类内还是类外?】。
MOOC知识点总结
-
重用类代码——使用已有类来定义新类(组合/继承)。
-
初始化对象——构造函数;
销毁对象清理内存——析构函数。
-
头文件引用工程内部——
#include "xxx.h"
-
组合类对象中的对象成员还包含自己的下级成员,可以访问;多级访问语法:
组合类对象名.对象成员名.对象成员的下级成员名
。- 多级访问将受到多级权限的控制。
-
组合类对象中数据成员的析构顺序是:先执行组合类析构函数的函数体,清理非对象成员;再调用对象成员所属类的析构函数,清理对象成员。
- 即对象的析构顺序与构造顺序相反。
-
数据成员中包含对象成员的类称为组合类