?? 继承就是从先辈处得到属性和行为特性。类的继承,是指新的类从已有类的那里得到的特性。类的派生,就是指已有类产生新类的过程。
定义为
class 派生类名:继承方式 基类名, .. 继承方式 基类名n
{
派生类成员声明;
};
继承的好处在于解决了代码的重用性和可扩充性。
一、公用继承
基类的公有成员和保护成员的访问在派生类,而基类的私有成员不可直接访问。
#include <iostream>
using namespace std;
class A {
public:
int i = 20;
virtual void aaa() {
cout << "A:aaa()" << endl;
}
};
class B :public A {
public:
int i = 21;
void aaa() {
cout << "B:aaa()" << endl;
}
};
int main() {
A * pb = new B();
pb->aaa();
cout << pb->i << endl;
B * b = new B();
cout << b->A::i << endl;
cout << b->i << endl;
b->A::aaa();
return 0;
}
运行结果为:
B:aaa()
20
20
21
A:aaa()
二:私有继承
则是:class 类名:private 基类名
此时,基类中的公有成员与保护成员都在派生类中以私有成员的身份出现。
例如将代码中的“class B :public A”改为“class B :private A”
系统将会报错:
C2248 “A::i”: 无法访问 private 成员(在“A”类中声明)
C2248 “A::aaa”: 无法访问 private 成员(在“A”类中声明)
三、保护继承
基类的公有成员与私有成员都以保护成员的身份出现在派生类中,而基类的私有成员不可访问。
#include<iostream>
#include<assert.h>
using namespace std;
class A {
public:
int a;
A() {
a2 = 2;
a = 4;
}
void fun() {
cout << a << endl;
cout << a2 << endl;
}
protected:
int a2;
};
class B : protected A {
public:
int a;
B(int i) {
A();
a = i;
}
void fun() {
cout << a << endl;
cout << a2 << endl;
}
};
int main() {
B b(10);
cout << b.a << endl;
return 0;
}
原文:https://www.cnblogs.com/Drac/p/11667742.html