☰
C++ 的类是什么(新手保姆讲解,配合 Qt 对照理解)
2026/10/13 10:03:53 网站建设 项目流程

一句话总结

C++ 的类(class)就是一张「图纸」,用来描述一类事物:这类事物有哪些特征(成员变量)、能做哪些动作(成员函数)。根据这张图纸,可以造出很多个对象(实例)。

类比: 类 = 房子图纸 对象 = 按照图纸盖出来的真实房子 一张图纸,可以盖出很多套房子。

1. 类的两大组成部分

  1. 成员变量(属性 / 特征):描述这个东西有什么数据。 比如人:姓名、年龄;汽车:颜色、速度。
  2. 成员函数(方法 / 行为):描述这个东西能干什么。 比如人:说话、走路;汽车:加速、刹车。

访问权限(新手记住 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岁

逐行解释

  1. class Person:定义一个名叫 Person 的类(图纸)
  2. Person(string name, int age)→构造函数名字必须和类名一模一样。创建对象自动执行,用来给成员变量赋初始值。
  3. void sayHello():成员函数,是这个类具备的行为
  4. private里面的m_name、m_age:成员变量,保存这个对象的数据,外面不能直接读写
  5. 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. 新手容易踩坑的点

  1. 类只是图纸,不创建对象,类里面的代码不会运行。
  2. private 私有成员,在 main 函数里不能直接写p1.m_name="xxx",编译报错,只能通过类内函数访问。
  3. 构造函数没有返回值,名字必须和类名完全相同。
  4. C++ 继承 ≠ Qt 的 parent 对象父子关系!
    • C++ 继承:类和类之间代码复用(图纸继承图纸)
    • Qt parent:对象实例之间的归属关系,用来自动释放内存(房子归属于大楼)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询