1.需要补习的C++知识
类,派生,父类子类
StackDlg::StackDlg(QWidget *parent)
: QDialog(parent)
对应语法:
派生类::派生类构造函数(总参数列表):基类构造函数(参数列表) //基类构造函数的参数列表是实参。
{
派生类中的数据成员初始化;
}
构造函数&析构函数
构造函数在对象实例化时被系统自动调用,仅且调用一次。定义类时,如果没有定义构造函数和析构函数,编译器会自动生成一个构造函数和析构函数,只是内部为空。
构造函数
的名称与类的名称是完全相同,无任何范返回类型(void 也不行)。构造函数可用于为某些成员变量设置初始值。构造函数也可以带有参数
析构函数
的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,目的是释放资源。
写法如下
#include <iostream>
using namespace std;
class Demo
{
public:
Demo(); //构造函数
~Demo(); // 析构函数
};
Demo::Demo()
{
cout << "构造函数" << endl;
}
Demo::~Demo()
{
cout << "析构函数"<<endl;
}
继承
继承目的就是站在基础类上扩展更多的功能。比如QT里的QLabel和QLineEdit都是继承的QWidget类。实现了更多个细化的功能。继承有公有,私有保护的继承方式
容器
对象
友元
this指针
this 指针记录对象的内存地址,比如一个类内部有一个this,这个类的实例对象中,this就是指向这个对象。这也是为什么只有类的成员函数才能有this这个玩意了,其实和python的self有着相同之处。
虚函数 纯虚函数 多态
new
new 出来的对象都是匿名,没有名字,然后需要一个指针来指向它,再借助指针访问其成员变量。对象指针后可通过->来指向成员变量和成员函数
堆和栈
堆,英文是 heap,在内存管理的语境下,指的是动态分配内存的区域。这个堆跟数据结构里的堆不是一回事。这里的内存,被分配之后需要手工释放,否则,就会造成内存泄漏。C++ 标准里一个相关概念是自由存储区,英文是 free store,特指使用
new
和delete
来分配和释放内存的区域。一般而言,这是堆的一个子集:
new
和delete
操作的区域是 free storemalloc
和free
操作的区域是 heap
但
new
和delete
通常底层使用malloc
和free
来实现,所以 free store 也是 heap。鉴于对其区分的实际意义并不大,在本专栏里,除非另有特殊说明,我会只使用堆这一术语。
栈,英文是 stack,在内存管理的语境下,指的是函数调用过程中产生的本地变量和调用数据的区域。这个栈和数据结构里的栈高度相似,都满足“后进先出”(last-in-first-out 或 LIFO)。
实例对象的时候,使用New实例的都是在堆里,使用className objName
的是在栈区实例化
重载
重载就是同名函数,但是参数列表不一样。然后调用的时候会根据参数来选择最合适的函数
重载分为函数重载
和运算重载