前言
持续更新了
正文
问题来源
今天工作的时候看到一段关于私有继承的代码。
前言
话不多说上代码
:
#include <iostream>
using namespace std;
class A{
public:
virtual void a1() = 0;
virtual void a2() = 0;
};
class B {
public:
B() {
a = NULL;
}
void setA(A* a) {this->a = a;}
void print() {
if (NULL == a) {
return;
}
a->a1();
a->a2();
}
private:
A* a;
};
class C : private A {
public:
C() {}
virtual void a1() {
cout << "a1" << endl;
}
private:
virtual void a2() {
cout << "a2" << endl;
}
};
int main() {
A* p = new C;
B b;
b.setA(p);
b.print();
return 0;
}
编译出错
inherit.cpp: In function ‘int main()’:
inherit.cpp:40:13: error: ‘A’ is an inaccessible base of ‘C’
A* p = new C;
// 其余代码不变
class C : private A {
public:
C() {b.setA(this);} // 给B上设置A的派生类对象
virtual void a1() {
cout << "a1" << endl;
}
void print() { // 增加给外界调用的入口
b.print();
}
private:
virtual void a2() {
cout << "a2" << endl;
}
public:
B b; // 增加类型为B的成员
};
int main() {
C c;
c.print();
return 0;
}
结果
a1
a2
总结:
结语
不管怎么样好好加油。