C语言和C++中的虚基类的作用是什么
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍"C语言和C++中的虚基类的作用是什么",在日常操作中,相信很多人在C语言和C++中的虚基类的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C
千家信息网最后更新 2025年01月19日C语言和C++中的虚基类的作用是什么
这篇文章主要介绍"C语言和C++中的虚基类的作用是什么",在日常操作中,相信很多人在C语言和C++中的虚基类的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C语言和C++中的虚基类的作用是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
目录
概述
多重继承的问题
虚基类
初始化
例子
概述
虚基类 (virtual base class) 是用关键字 virtual 声明继承的父类.
多重继承的问题
N 类:
class N {public: int a; void display(){ cout << "A::a=" << a <A 类:
class A : public N {public: int a1;};B 类:
class B : public N {public: int a2;};C 类:
class C: public A, public B{public: int a3; void display() {cout << "a3=" << a3 << endl;};};main:
int main() { C c1; // 合法访问 c1.A::a = 3; c1.A::display(); return 0;}输出结果:
A::a=3
存在的问题:
A::a 和 B::a 是 N 类成员的拷贝
A::a 和 B::a 占用不同的空间
虚基类
我们希望继承间接共同基类时只保留一份成员, 所以虚基类就诞生了. 当基类通过多条派生路径被一个派生类继承时, 该派生类只继承该基类一次.
语法:
class 派生类名: virtual 继承方式 基类名初始化
通过构造函数的初始化表对虚拟类进行初始化. 例如:
N 类:
class N {public: int n; N(int n) : n(n) {};};A 类:
class A : virtual public N {public: A(int n) : N(n) {};};B 类:
class B : virtual public N {public: B(int n) : N(n) {};};C 类:
class C: public A, public B{public: C(int n) : N(n), A(n), B(n){};};例子
Person 类:
#ifndef PROJECT5_PERSON_H#define PROJECT5_PERSON_H#include#include using namespace std;class Person {protected: string name; char gender;public: Person(string n, char g) : name(n), gender(g) {} void display() { cout << "name: " << name << endl; cout << "gender: " << gender << endl; }};#endif //PROJECT5_PERSON_H Student 类:
#ifndef PROJECT5_STUDENT_H#define PROJECT5_STUDENT_H#include#include "Person.h"using namespace std;class Student : virtual public Person {protected: double score;public: Student(string n, char g, double s) : Person(n, g), score(s) {};};#endif //PROJECT5_STUDENT_H Teacher 类:
#ifndef PROJECT5_TEACHER_H#define PROJECT5_TEACHER_H#include#include "Person.h"using namespace std;class Teacher : virtual public Person {protected: string title;public: Teacher(string n, char g, string t) : Person(n, g), title(t) {};};#endif //PROJECT5_TEACHER_H Graduate 类:
#ifndef PROJECT5_GRADUATE_H#define PROJECT5_GRADUATE_H#include "Teacher.h"#include "Student.h"#includeusing namespace std;class Graduate : public Teacher, public Student{private: double wage;public: Graduate(string n, char g, double s, string t, double w) : Person(n, g), Student(n, g, s), Teacher(n, g, t), wage(w) {}; void display() { Person::display(); cout << "score: " << score << endl; cout << "title: " << title << endl; cout << "wages: " << wage << endl; };};#endif //PROJECT5_GRADUATE_H main:
#include#include "Graduate.h"using namespace std;int main() { Graduate grad1("小白",'f',89.5,"教授",1234.5); grad1.display(); return 0;} 输出结果:
name: 小白
gender: f
score: 89.5
title: 教授
wages: 1234.5到此,关于"C语言和C++中的虚基类的作用是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
作用
语言
C++
问题
学习
例子
成员
教授
更多
类名
结果
小白
帮助
输出
不同
合法
实用
接下来
关键
关键字
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
python连接数据库代理
校园网络安全督查通知
数据库primery已满
湖北品质软件开发设施价钱
佛山医院食堂自助点餐软件开发
河北根创网络技术有限公司
成都电商软件开发如何收费
内蒙古加强网络安全体系建设
APP软件开发时间进度表
南通搭建存储服务器
国家网络安全周在
浙江教育网络安全平台
安徽计算机应用软件开发哪家好
画饭圈乱象绘网络安全绘画主题
福建网络技术开发信息中心
浦发ukey连接浦发银行服务器失败
杭州漫蝌网络技术有限公司
软件开发工程师的要求
bugfree 数据库表
网络技术四级容易吗
校园网络安全督查通知
取值是男或女的数据库语句
什么是SAP软件开发
天津软件开发哪家不错
wow服务器联盟部落比例
服务器磐机
局域网打印机服务器
教育系统网络安全知识竞赛
java文件存入数据库
自主研发数据库管理系统