今天上午上面向对象课程学了多重继承,在课堂上编写一堆BUG😂,在宿舍刚刚改完并写了一个小例子,来分享一下。(第一次写写的不好勿怪哈😂)
首先,继承机制就是为了节省时间,让拥有共同特性的新类可以直接继承之前写过的类的共同特性(就是可以少写几行代码,目前来看昂😂)
1.来创建一个基类[class (类)]
//创建一个名为Cl的类(基类)
#pragma once
#include <iostream>
using namespace std;
class Cl {
public:
int an;//这个类里包含了一个int类型的an
Cl(int a) {
an = a;
cout << "调用Cl构造函数成功" << endl;
}
};
2.创建子类
//创建一个Cla的子类
#pragma once
#include "Cl.h"
class Cla :virtual Cl { //子类Cla的基类是Cl,且是一个虚基类
public:
int bn;
Cla(int a, int b);
};
Cla::Cla(int a, int b) :Cl(a) {
bn = b;
cout << "调用Cla函数成功" << endl;
}
敲重点,在Visual Studio 中 为了防止咱们重复调用同一个类,导致程序报错,推荐在.h(头文件中)加上#pragma once 。
而且为了取消二义性,我们用虚基类。就是在“:”后 ,基类名之前 加上 virtual。
后续的子类:
Clb.h:
#pragma once
#include"Cl.h"
#include<iostream>
using namespace std;
class Clb :virtual public Cl {
public:
int cn;
Clb(int a, int c);
};
Clb::Clb(int a, int c) :Cl(a) {
cn = c;
cout << "调用Clb的构造函数成功" << endl;
}
Cld.h:
#pragma once
#include"Cla.h"
#include"Clb.h"
class Cld:virtual public Cla,public Clb {
public:
int dn;
Cld(int a, int b, int c, int d);
void show();
};
Cld::Cld(int a, int b, int c, int d) :Cla(a, b), Clb(a, c),Cl(a) {
dn = d;
cout << "调用Cld构造函数成功" << endl;
}
void Cld::show() {
cout <<"第一" << an << endl;
cout << "第二" << bn << endl;
cout << "第三" << cn << endl;
cout << "第四" << dn << endl;
}
在Cld中 在构造函数引用基类的时候Cld::Cld(int a, int b, int c, int d) :Cla(a, b), Clb(a, c),Cl(a)
要引用到最初始的基类,在这个文件中就是Cl(a)。
其次在构造函数时候构造函数本体"Cld(int a, int b, int c,int d)"用的是形参,“:”后的用的是实参。
最后是main 函数
ZhuYao.cpp
#include <iostream>
using namespace std;
#include"Cld.h"
int main() {
Cld new1(22, 11, 10, 7);
new1.show();
return 0;
}
最后运行编译结果为:
不是很美观,(*/ω\*)。
第一次写这种知识类的分享,知识类的错误还望各位大佬多多指出感谢感谢!!