news 2026/4/14 19:04:22

【C++】继承深度解析:继承方式和菱形虚拟继承的详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【C++】继承深度解析:继承方式和菱形虚拟继承的详解
一、继承方式
1. 单继承

一个派生类只有一个直接基类的时候称这个继承为单继承 Person ↓ Teacher ↓ Student (单链)

代码语言:javascript

AI代码解释

// 基类:人 class Person { public: string name; int age; void ShowPerson() { cout << "姓名: " << name << ",年龄: " << age << endl; } }; // 派生类:老师(继承人) class Teacher : public Person { public: string subject; void ShowTeacher() { cout << "姓名: " << name << ",年龄: " << age << ",教授科目: " << subject << endl; } }; // 派生类:学生(继承老师) class Student : public Teacher { public: string school; void ShowStudent() { cout << "姓名: " << name << ",年龄: " << age << ",教授科目: " << subject << ",学校: " << school << endl; } }; int main() { Student s; s.name = "呆头"; // 来自 Person s.age = 20; // 来自 Person s.subject = "C++"; // 来自 Teacher s.school = "野鸡大学"; // 来自 Student s.ShowStudent(); return 0; }

运行结果

在这里插入图片描述

多链

在这里插入图片描述

代码语言:javascript

AI代码解释

// 基类:人 class Person { public: string name; int age; void ShowPerson() { cout << "姓名: " << name << ",年龄: " << age << endl; } }; // 派生类:老师 class Teacher : public Person { public: string subject; void Teach() { cout << name << " 正在教授 " << subject << " 课程。" << endl; } }; // 派生类:学生 class Student : public Person { public: string school; void Study() { cout << name << " 在 " << school << " 学习。" << endl; } }; int main() { Teacher t; t.name = "张老师"; t.age = 35; t.subject = "C++"; t.ShowPerson(); t.Teach(); cout << "------------------" << endl; Student s; s.name = "李华"; s.age = 20; s.school = "宁夏大学"; s.ShowPerson(); s.Study(); return 0; }
2. 多继承

一个派生类有两个或者以上的直接基类时称这个继承关系为多继承,多继承对象在内存中的模型是先继承的基类在前面,后继承的基类在后面,派生类成员放在最后面。多继承的使用方法是在子类的位置对多个父类使用逗号,进行间隔,其余方式public形式不变,进行继承

代码语言:javascript

AI代码解释

Person Teacher Athlete \ | / \ | / ----> Student

代码语言:javascript

AI代码解释

// 基类:人 class Person { public: string name; int age; }; // 老师类 class Teacher { public: string subject; void Teach() { cout << "正在教授 " << subject << " 课程。" << endl; } }; // 运动员类 class Athlete { public: string sport; void Train() { cout << "正在训练 " << sport << " 项目。" << endl; } }; // 学生类(多继承) class Student : public Person, public Teacher, public Athlete { public: string school; void Show() { cout << "姓名: " << name << ",年龄: " << age << ",学校: " << school << ",教授科目: " << subject << ",运动项目: " << sport << endl; } }; int main() { Student s; s.name = "李华"; s.age = 20; s.school = "宁夏大学"; s.subject = "C++"; s.sport = "800米"; s.Show(); s.Teach(); s.Train(); return 0; }

运行结果

在这里插入图片描述

3. 菱形继承

菱形继承是多继承的⼀种特殊情况。菱形继承的问题有数据冗余和⼆义性的问题。⽀持多继承就⼀定会有菱形继承,像Java就直接不⽀持多继承,规避掉了这⾥的问题,所以实践中我们也是不建议设计出菱形继承这样的模型的。

在这里插入图片描述

代码语言:javascript

AI代码解释

#include <iostream> #include <string> using namespace std; // 基类:人 class Person { public: string name; int age; }; // 老师继承人 class Teacher : public Person { public: string subject; void Teach() { cout << name << " 正在教授 " << subject << endl; } }; // 运动员继承人 class Athlete : public Person { public: string sport; void Train() { cout << name << " 正在训练项目:" << sport << endl; } }; // 学生同时继承老师与运动员 class Student : public Teacher, public Athlete { public: string school; void Show() { // ⚠️ 错误:编译器不知道 name 是哪个基类的 // cout << "姓名: " << name << endl; // ❌ 二义性 cout << "Teacher::name = " << Teacher::name << endl; cout << "Athlete::name = " << Athlete::name << endl; cout << "学校: " << school << endl; } }; int main() { Student s; s.Teacher::name = "张老师"; s.Athlete::name = "李同学"; // 各自一份 name s.subject = "C++"; s.sport = "800米"; s.school = "宁夏大学"; s.Show(); // 访问需要显式指定路径 s.Teacher::Teach(); s.Athlete::Train(); return 0; }

Student ├── Teacher::Person │ ├── name │ └── age ├── Athlete::Person │ ├── name │ └── age └── school

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.1 菱形虚拟继承

如何解决菱形继承带来的弊端?——》使用虚拟继承! 以上述对象模型为例,在 Teacher 和 Athlete 继承 Person 时采用虚拟继承,即可避免 Student 同时拥有两份 Person 子对象。

  • 虚拟继承是一种专门用于解决菱形继承问题的机制,在其它普通继承场景下不建议使用。
  • 在 C++ 中,虚拟继承的使用方式是:当多个派生类继承自同一个公共基类,并且这些派生类又被同一个子类多继承时,应当在这些“中间层”父类继承公共基类的地方,使用 virtual 关键字进行修饰。(上述示例就应该在老师和运动处使用virtual进行修饰)

代码语言:javascript

AI代码解释

class Person { public: string name; int age; }; // 老师虚继承人 class Teacher : virtual public Person { public: string subject; }; // 运动员虚继承人 class Athlete : virtual public Person { public: string sport; }; // 学生多继承 class Student : public Teacher, public Athlete { public: string school; void Show() { cout << "姓名: " << name << endl; // ✅ 不再二义性 cout << "学校: " << school << endl; } };
3.2 菱形虚拟继承的原理

回顾我们上述示例是这样的继承关系:

代码语言:javascript

AI代码解释

Person / \ Teacher Athlete \ / Student
  • 如果Student同时继承Teacher和Athlete,他就会有两份Person成员(一次从Teacher一次从Athlete),这样会造成数据冗余
  • 调用Student的Person的成员函数或者访问成员变量的时候,编译器就不知道选择Teacher中的还是Athlete中的那一份,就造成了二义性

3.2.1 内存布局

虚拟继承会让共享的基类在内存中只有一份,并且派生类通过虚基表(vbt/vptr类似)来找到这份共享的基类。

代码语言:javascript

AI代码解释

Student 对象布局(虚继承): [ Student 部分 ][ Teacher 部分 ][ Athlete 部分 ][ Person(共享) ]

注意Person只存在一份。

  • 每个通过虚继承的中间类(TeacherAthlete)内部不直接包含Person成员,而是包含一个指向共享Person的指针(实际上是偏移量)。
  • Student被实例化时,最终会在对象末尾放置一份Person数据。
  • 所有通过虚继承的类访问Person时,通过偏移量找到唯一的Person

示意图:

代码语言:javascript

AI代码解释

Student 内存: [ Student fields ] [ Teacher fields | pointer_to_shared_Person ] [ Athlete fields | pointer_to_shared_Person ] [ Shared Person fields ]

3.2.2 虚表(vtable/vptr)调整

虚继承通常涉及两个表:

普通虚表:用于多态函数调用。虚基表(VBT):用于找到虚继承基类的偏移量。

访问虚基类成员时:

  • 编译器生成代码不是this + offset_of_Person_in_Teacher
  • 而是this + vbt_offset→ 找到唯一Person

举例:

代码语言:javascript

AI代码解释

Student s; s.Teacher::Person::name = "Alice"; // 编译器查找 Teacher 的虚基表 -> 定位到 Student 中唯一的 Person

底层逻辑thisStudent的起始地址 → 查找虚基表中的Person偏移量 → 访问共享Person


3.2.3 构造函数调用顺序

虚继承的构造顺序也不同:

  1. 最顶层虚基类(Person)先构造。
  2. 然后是非虚中间类(TeacherAthlete)。
  3. 最后是最派生类(Student)。

m.blznp.pro/post/11757.html
m.blznp.pro/post/79719.html
m.blznp.pro/post/24682.html
m.blznp.pro/post/68046.html
m.blznp.pro/post/44202.html
m.blznp.pro/post/33995.html
m.blznp.pro/post/84266.html
m.blznp.pro/post/35555.html
m.blznp.pro/post/46260.html
m.blznp.pro/post/57197.html
m.blznp.pro/post/35133.html
m.blznp.pro/post/62442.html
m.blznp.pro/post/57593.html
m.blznp.pro/post/51913.html
m.blznp.pro/post/75575.html
m.blznp.pro/post/75777.html
m.blznp.pro/post/93391.html
m.blznp.pro/post/35575.html
m.blznp.pro/post/57393.html
m.blznp.pro/post/91717.html
m.blznp.pro/post/37917.html
m.blznp.pro/post/39713.html
m.blznp.pro/post/19999.html
m.blznp.pro/post/13943.html
m.blznp.pro/post/17797.html
m.blznp.pro/post/57117.html
m.blznp.pro/post/53777.html
m.blznp.pro/post/19555.html
m.blznp.pro/post/97931.html
m.blznp.pro/post/17917.html
m.blznp.pro/post/59995.html
m.blznp.pro/post/26004.html
m.blznp.pro/post/33979.html
m.blznp.pro/post/79795.html
m.blznp.pro/post/19337.html
m.blznp.pro/post/77371.html
m.blznp.pro/post/13599.html
m.blznp.pro/post/99553.html
m.blznp.pro/post/99511.html
m.blznp.pro/post/80848.html
m.blznp.pro/post/19733.html
m.blznp.pro/post/19711.html
m.blznp.pro/post/33771.html
m.blznp.pro/post/44668.html
m.blznp.pro/post/15399.html
m.blznp.pro/post/13491.html
m.blznp.pro/post/93571.html
m.blznp.pro/post/53177.html
m.blznp.pro/post/11317.html
m.blznp.pro/post/46046.html
m.blznp.pro/post/68620.html
m.blznp.pro/post/97313.html
m.blznp.pro/post/19777.html
m.blznp.pro/post/68466.html
m.blznp.pro/post/37777.html
m.blznp.pro/post/02280.html
m.blznp.pro/post/99339.html
m.blznp.pro/post/97377.html
m.blznp.pro/post/57337.html
m.blznp.pro/post/73913.html
m.blznp.pro/post/73593.html
m.blznp.pro/post/15335.html
m.blznp.pro/post/95377.html
m.blznp.pro/post/13795.html
m.blznp.pro/post/91979.html
m.blznp.pro/post/75913.html
m.blznp.pro/post/33975.html
m.blznp.pro/post/19779.html
m.blznp.pro/post/31513.html
m.blznp.pro/post/73931.html
m.blznp.pro/post/17757.html
m.blznp.pro/post/91519.html
m.blznp.pro/post/97133.html
m.blznp.pro/post/68808.html
m.blznp.pro/post/68448.html
m.blznp.pro/post/79953.html
m.blznp.pro/post/97191.html
m.blznp.pro/post/51199.html
m.blznp.pro/post/44002.html
m.blznp.pro/post/17513.html
m.blznp.pro/post/15359.html
m.blznp.pro/post/48444.html
m.blznp.pro/post/55113.html
m.blznp.pro/post/15319.html
m.blznp.pro/post/37173.html
m.blznp.pro/post/86240.html
m.blznp.pro/post/77775.html
m.blznp.pro/post/39511.html
m.blznp.pro/post/97991.html
m.blznp.pro/post/68886.html
m.blznp.pro/post/53933.html
m.blznp.pro/post/53191.html
m.blznp.pro/post/51333.html
m.blznp.pro/post/03059.html
m.blznp.pro/post/53751.html
m.blznp.pro/post/53711.html
m.blznp.pro/post/39933.html
m.blznp.pro/post/22428.html
m.blznp.pro/post/71935.html
m.blznp.pro/post/31731.html
m.blznp.pro/post/53715.html
m.blznp.pro/post/04680.html
m.blznp.pro/post/84680.html
m.blznp.pro/post/95751.html
m.blznp.pro/post/55575.html
m.blznp.pro/post/60686.html
m.blznp.pro/post/71311.html
m.blznp.pro/post/59115.html
m.blznp.pro/post/77517.html
m.blznp.pro/post/72178.html
m.blznp.pro/post/79591.html
m.blznp.pro/post/53353.html
m.blznp.pro/post/95715.html
m.blznp.pro/post/95315.html
m.blznp.pro/post/24466.html
m.blznp.pro/post/13553.html
m.blznp.pro/post/91917.html
m.blznp.pro/post/20820.html
m.blznp.pro/post/08260.html
m.blznp.pro/post/13535.html
m.blznp.pro/post/91359.html
m.blznp.pro/post/08466.html
m.blznp.pro/post/55199.html
m.blznp.pro/post/75957.html
m.blznp.pro/post/33511.html
m.blznp.pro/post/71837.html
m.blznp.pro/post/99753.html
m.blznp.pro/post/39173.html
m.blznp.pro/post/55759.html
m.blznp.pro/post/31135.html
m.blznp.pro/post/91793.html
m.blznp.pro/post/35155.html
m.blznp.pro/post/75557.html
m.blznp.pro/post/77539.html
m.blznp.pro/post/15131.html
m.blznp.pro/post/59351.html
m.blznp.pro/post/86660.html
m.blznp.pro/post/20080.html
m.blznp.pro/post/37711.html
m.blznp.pro/post/93935.html
m.blznp.pro/post/31933.html
m.blznp.pro/post/19939.html
m.blznp.pro/post/48020.html
m.blznp.pro/post/79739.html
m.blznp.pro/post/77977.html
m.blznp.pro/post/55715.html
m.blznp.pro/post/51171.html
m.blznp.pro/post/15959.html
m.blznp.pro/post/99539.html
m.blznp.pro/post/84686.html
m.blznp.pro/post/13717.html
m.blznp.pro/post/42020.html
m.blznp.pro/post/20004.html
m.blznp.pro/post/75159.html
m.blznp.pro/post/57199.html
m.blznp.pro/post/59975.html
m.blznp.pro/post/00288.html
m.blznp.pro/post/95793.html
m.blznp.pro/post/35779.html
m.blznp.pro/post/42820.html
m.blznp.pro/post/57195.html
m.blznp.pro/post/79597.html
m.blznp.pro/post/31357.html
m.blznp.pro/post/59399.html
m.blznp.pro/post/55719.html
m.blznp.pro/post/93313.html
m.blznp.pro/post/88280.html
m.blznp.pro/post/99155.html
m.blznp.pro/post/48408.html
m.blznp.pro/post/19359.html
m.blznp.pro/post/15595.html
m.blznp.pro/post/66246.html
m.blznp.pro/post/11955.html
m.blznp.pro/post/55917.html
m.blznp.pro/post/91559.html
m.blznp.pro/post/26280.html
m.blznp.pro/post/39571.html
m.blznp.pro/post/79175.html
m.blznp.pro/post/17157.html
m.blznp.pro/post/97975.html
m.blznp.pro/post/57951.html
m.blznp.pro/post/73173.html
m.blznp.pro/post/59111.html
m.blznp.pro/post/75513.html
m.blznp.pro/post/37577.html
m.blznp.pro/post/31537.html
m.blznp.pro/post/84286.html
m.blznp.pro/post/39931.html
m.blznp.pro/post/93373.html
m.blznp.pro/post/60664.html
m.blznp.pro/post/20222.html
m.blznp.pro/post/75531.html
m.blznp.pro/post/55979.html
m.blznp.pro/post/57793.html
m.blznp.pro/post/39913.html
m.blznp.pro/post/91113.html
m.blznp.pro/post/19931.html
m.blznp.pro/post/19973.html
m.blznp.pro/post/31579.html
m.blznp.pro/post/86226.html
m.blznp.pro/post/77959.html
m.blznp.pro/post/82068.html
m.blznp.pro/post/55557.html
m.blznp.pro/post/71795.html
m.blznp.pro/post/75771.html
m.blznp.pro/post/35591.html
m.blznp.pro/post/95755.html
m.blznp.pro/post/73139.html
m.blznp.pro/post/19731.html
m.blznp.pro/post/57157.html
m.blznp.pro/post/84048.html
m.blznp.pro/post/19519.html
m.blznp.pro/post/79599.html
m.blznp.pro/post/79771.html
m.blznp.pro/post/73915.html
m.blznp.pro/post/11359.html
m.blznp.pro/post/42680.html
m.blznp.pro/post/93377.html
m.blznp.pro/post/64044.html
m.blznp.pro/post/95579.html
m.blznp.pro/post/31193.html
m.blznp.pro/post/97353.html
m.blznp.pro/post/15915.html
m.blznp.pro/post/93537.html
m.blznp.pro/post/55173.html
m.blznp.pro/post/13591.html
m.blznp.pro/post/31531.html
m.blznp.pro/post/60020.html
m.blznp.pro/post/28246.html
m.blznp.pro/post/13159.html
m.blznp.pro/post/17791.html
m.blznp.pro/post/37515.html
m.blznp.pro/post/33333.html
m.blznp.pro/post/31711.html
m.blznp.pro/post/77397.html
m.blznp.pro/post/71595.html
m.blznp.pro/post/91571.html
m.blznp.pro/post/13517.html
m.blznp.pro/post/15159.html
m.blznp.pro/post/42082.html
m.blznp.pro/post/13797.html
m.blznp.pro/post/39515.html
m.blznp.pro/post/66820.html
m.blznp.pro/post/28080.html
m.blznp.pro/post/53791.html
m.blznp.pro/post/00204.html
m.blznp.pro/post/22604.html
m.blznp.pro/post/13735.html
m.blznp.pro/post/86842.html
m.blznp.pro/post/53339.html
m.blznp.pro/post/77979.html
m.blznp.pro/post/77173.html
m.blznp.pro/post/53731.html
m.blznp.pro/post/97179.html
m.blznp.pro/post/75757.html
m.blznp.pro/post/13375.html
m.blznp.pro/post/59193.html
m.blznp.pro/post/19355.html
m.blznp.pro/post/17135.html
m.blznp.pro/post/79317.html
m.blznp.pro/post/95775.html
m.blznp.pro/post/79915.html
m.blznp.pro/post/26406.html
m.blznp.pro/post/35735.html
m.blznp.pro/post/79731.html
m.blznp.pro/post/57771.html
m.blznp.pro/post/22200.html
m.blznp.pro/post/75313.html
m.blznp.pro/post/99513.html
m.blznp.pro/post/88666.html
m.blznp.pro/post/71533.html
m.blznp.pro/post/33153.html
m.blznp.pro/post/88208.html
m.blznp.pro/post/75193.html
m.blznp.pro/post/99535.html
m.blznp.pro/post/39991.html
m.blznp.pro/post/91111.html
m.blznp.pro/post/93753.html
m.blznp.pro/post/73535.html
m.blznp.pro/post/62428.html
m.blznp.pro/post/95791.html
m.blznp.pro/post/99157.html
m.blznp.pro/post/17955.html
m.blznp.pro/post/93177.html
m.blznp.pro/post/95155.html
m.blznp.pro/post/11795.html
m.blznp.pro/post/73379.html
m.blznp.pro/post/53115.html
m.blznp.pro/post/60046.html
m.blznp.pro/post/55755.html
m.blznp.pro/post/86608.html
m.blznp.pro/post/35397.html
m.blznp.pro/post/53155.html
m.blznp.pro/post/46008.html
m.blznp.pro/post/51539.html
m.blznp.pro/post/80080.html
m.blznp.pro/post/55751.html
m.blznp.pro/post/71153.html
m.blznp.pro/post/15973.html
m.blznp.pro/post/11573.html
m.blznp.pro/post/08428.html
m.blznp.pro/post/39115.html
m.blznp.pro/post/15919.html
m.blznp.pro/post/57115.html
m.blznp.pro/post/71539.html
m.blznp.pro/post/59997.html
m.blznp.pro/post/40844.html
m.blznp.pro/post/28226.html
m.blznp.pro/post/99199.html
m.blznp.pro/post/48739.html
m.blznp.pro/post/11337.html
m.blznp.pro/post/88022.html
m.blznp.pro/post/91935.html
m.blznp.pro/post/31937.html
m.blznp.pro/post/82460.html
m.blznp.pro/post/79351.html
m.blznp.pro/post/71111.html
m.blznp.pro/post/99577.html
m.blznp.pro/post/59939.html
m.blznp.pro/post/77571.html
m.blznp.pro/post/66204.html
m.blznp.pro/post/71513.html
m.blznp.pro/post/17315.html
m.blznp.pro/post/71577.html
m.blznp.pro/post/79379.html
m.blznp.pro/post/93337.html
m.blznp.pro/post/17953.html
m.blznp.pro/post/19579.html
m.blznp.pro/post/57171.html
m.blznp.pro/post/44082.html
m.blznp.pro/post/82080.html
m.blznp.pro/post/93915.html
m.blznp.pro/post/35737.html
m.blznp.pro/post/35115.html
m.blznp.pro/post/66602.html
m.blznp.pro/post/11335.html
m.blznp.pro/post/48240.html
m.blznp.pro/post/80608.html
m.blznp.pro/post/39159.html
m.blznp.pro/post/13519.html
m.blznp.pro/post/93591.html
m.blznp.pro/post/93319.html
m.blznp.pro/post/33133.html
m.blznp.pro/post/31511.html
m.blznp.pro/post/15559.html
m.blznp.pro/post/79531.html
m.blznp.pro/post/82682.html
m.blznp.pro/post/11733.html
m.blznp.pro/post/99151.html
m.blznp.pro/post/26668.html
m.blznp.pro/post/20622.html
m.blznp.pro/post/13937.html
m.blznp.pro/post/91577.html
m.blznp.pro/post/37111.html
m.blznp.pro/post/75117.html
m.blznp.pro/post/79171.html
m.blznp.pro/post/95151.html
m.blznp.pro/post/40862.html
m.blznp.pro/post/37937.html
m.blznp.pro/post/00820.html
m.blznp.pro/post/59559.html
m.blznp.pro/post/15351.html
m.blznp.pro/post/62882.html
m.blznp.pro/post/53999.html
m.blznp.pro/post/77117.html
m.blznp.pro/post/19591.html
m.blznp.pro/post/73553.html
m.blznp.pro/post/46826.html
m.blznp.pro/post/53157.html
m.blznp.pro/post/73351.html
m.blznp.pro/post/33351.html
m.blznp.pro/post/06408.html
m.blznp.pro/post/97997.html
m.blznp.pro/post/15535.html
m.blznp.pro/post/53931.html
m.blznp.pro/post/73911.html
m.blznp.pro/post/00404.html
m.blznp.pro/post/48220.html
m.blznp.pro/post/00880.html
m.blznp.pro/post/77333.html
m.blznp.pro/post/31155.html
m.blznp.pro/post/17957.html
m.blznp.pro/post/22424.html
m.blznp.pro/post/00408.html
m.blznp.pro/post/15395.html
m.blznp.pro/post/39759.html
m.blznp.pro/post/35775.html
m.blznp.pro/post/59391.html
m.blznp.pro/post/73155.html
m.blznp.pro/post/31951.html
m.blznp.pro/post/39939.html
m.blznp.pro/post/42208.html

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 2:36:46

如何构建一个 OpenAI 兼容的 API

原文&#xff1a;towardsdatascience.com/how-to-build-an-openai-compatible-api-87c8edea2f06?sourcecollection_archive---------0-----------------------#2024-03-24 创建一个服务器来复制 OpenAI 的 Chat Completions API&#xff0c;使任何 LLM 都能与为 OpenAI API 编…

作者头像 李华
网站建设 2026/4/10 9:38:07

开源Excalidraw如何提升团队协作效率?实战案例解析

开源Excalidraw如何提升团队协作效率&#xff1f;实战案例解析 在远程办公成为常态的今天&#xff0c;技术团队常常面临一个看似简单却棘手的问题&#xff1a;如何让分散在不同时区的成员&#xff0c;在没有“面对面白板”的情况下&#xff0c;快速达成对系统架构或业务流程的共…

作者头像 李华
网站建设 2026/4/11 17:21:56

Excalidraw心理咨询图:情绪与事件关联分析

Excalidraw心理咨询图&#xff1a;情绪与事件关联分析 在一次远程心理咨询服务中&#xff0c;咨询师注意到来访者反复停顿、词不达意&#xff1a;“我就是……说不清楚&#xff0c;脑子里一团乱。” 这种“表达阻滞”在临床实践中极为常见——尤其是面对创伤回忆或复杂情绪交织…

作者头像 李华
网站建设 2026/4/15 1:23:06

基于python的大数据反电信诈骗管理系统(源码+文档)

项目简介大数据反电信诈骗管理系统实现了以下功能&#xff1a;该系统基于B/S模式架构&#xff0c;基于python语言开发&#xff0c;数据层存储采用mysql数据库。主要需要使用了Django框架&#xff0c;本论文研究内容为基于大数据反电信诈骗管理系统&#xff0c;主要的功能有文本…

作者头像 李华
网站建设 2026/4/13 19:00:14

Excalidraw睡眠监测图:作息规律分析

Excalidraw 与作息可视化&#xff1a;用一张手绘图看懂你的睡眠规律 在快节奏的现代生活中&#xff0c;越来越多的人开始关注自己的睡眠质量和作息规律。但翻看手机里的健康 App 数据表格&#xff0c;密密麻麻的时间戳和数字往往让人无从下手——我们真正需要的不是原始数据&a…

作者头像 李华
网站建设 2026/4/14 8:21:02

Excalidraw健身计划表:训练进度跟踪

Excalidraw健身计划表&#xff1a;训练进度跟踪 在数字工具越来越深入个人生活的今天&#xff0c;我们不再满足于用Excel记录每日深蹲次数&#xff0c;或靠手机备忘录提醒自己“今天练背”。越来越多追求效率与美感并重的人开始寻找一种既能清晰表达结构、又不失个性温度的记录…

作者头像 李华