C++ 的类是什么(新手保姆讲解,配合 Qt 对照理解)

发布时间:2026/10/13 10:04:00
C++ 的类是什么(新手保姆讲解,配合 Qt 对照理解)
一句话总结C 的类class就是一张「图纸」用来描述一类事物这类事物有哪些特征成员变量、能做哪些动作成员函数。根据这张图纸可以造出很多个对象实例。类比 类 房子图纸 对象 按照图纸盖出来的真实房子 一张图纸可以盖出很多套房子。1. 类的两大组成部分成员变量属性 / 特征描述这个东西有什么数据。 比如人姓名、年龄汽车颜色、速度。成员函数方法 / 行为描述这个东西能干什么。 比如人说话、走路汽车加速、刹车。访问权限新手记住 3 个public公开外面代码可以直接访问private私有只能类自己内部使用外部不能访问默认protected保护只有自己和子类能用初学暂时不用细抠2. 最简 C 类完整示例不带 Qt纯标准 C我们定义一个「人类」的类#include iostream #include string using namespace std; // 这就是【类】图纸 class Person { // 公开外部可以调用 public: // 构造函数新建对象的时候自动调用用来初始化变量 Person(string name, int age) { m_name name; m_age age; } // 成员函数行为 void sayHello() { cout 大家好我叫 m_name 今年 m_age 岁 endl; } // 私有属性外部不能直接访问 private: string m_name; // 姓名成员变量 int m_age; // 年龄成员变量 }; int main() { // 根据类图纸创建【对象】 Person p1(张三, 20); Person p2(李四, 25); // 调用对象的函数 p1.sayHello(); p2.sayHello(); return 0; }运行输出大家好我叫张三今年20岁 大家好我叫李四今年25岁逐行解释class Person定义一个名叫 Person 的类图纸Person(string name, int age)→构造函数名字必须和类名一模一样。创建对象自动执行用来给成员变量赋初始值。void sayHello()成员函数是这个类具备的行为private里面的m_name、m_age成员变量保存这个对象的数据外面不能直接读写Person p1(张三,20);创建对象 p1调用构造函数。p1 就是实例。重点区分类模板、图纸是类型不占内存对象根据类造出来的实体占用内存一个类可以创建无数对象3. 什么是继承C 原生继承Qt 大量用到继承一个类可以复用另一个类的代码在原有基础上新增功能。类比 有一张【动物图纸】然后【狗图纸】继承动物图纸自带动物的属性再增加狗独有的功能。#include iostream using namespace std; // 父类基类 class Animal { public: void eat() { cout 动物会吃东西 endl; } }; // 子类派生类公有继承Animal class Dog : public Animal { public: void bark() { cout 汪汪叫 endl; } }; int main() { Dog dog; dog.eat(); // 继承父类的函数 dog.bark(); // 自己新增的函数 return 0; }输出动物会吃东西 汪汪叫4. C 原生类 vs Qt 里继承 QObject 的类重点承接上一段内容项目普通 C 类上面 Person/Dog 例子Qt 继承 QObject 的类基础来源标准 C 原生语法底层还是 C 类只是继承了 Qt 的 QObject 类信号槽❌不支持✅支持需要写Q_OBJECT宏moc 工具处理内存管理new 创建对象必须手动 delete 释放否则内存泄漏new 时指定 parent 父对象父销毁自动释放子对象拷贝支持对象拷贝赋值Person a b;❌禁止拷贝QObject 子类不能直接复制对象元信息运行时不知道类名运行时可以查询类名、方法元对象系统一句话串联 Qt 的类本质就是 C 类只是 Qt 写了一个叫 QObject 的 C 基类我们自己写的类继承 QObject 之后就额外获得信号槽、对象树这些 Qt 独有的能力。5. 新手容易踩坑的点类只是图纸不创建对象类里面的代码不会运行。private 私有成员在 main 函数里不能直接写p1.m_namexxx编译报错只能通过类内函数访问。构造函数没有返回值名字必须和类名完全相同。C 继承 ≠ Qt 的 parent 对象父子关系C 继承类和类之间代码复用图纸继承图纸Qt parent对象实例之间的归属关系用来自动释放内存房子归属于大楼