以下是C++中私有继承、保护继承和公共继承的基本区别,通过一个简单的代码段进行演示:
#include <iostream>
// 基类
class Base {
public:
void publicFunction() {
std::cout << "Public function in Base class." << std::endl;
}
protected:
void protectedFunction() {
std::cout << "Protected function in Base class." << std::endl;
}
private:
void privateFunction() {
std::cout << "Private function in Base class." << std::endl;
}
};
// 公共继承
class DerivedPublic : public Base {
public:
void derivedFunction() {
// 可以访问基类的公有成员
publicFunction();
// 也可以访问基类的保护成员
protectedFunction();
// 不能访问基类的私有成员
// privateFunction(); // Error
}
};
// 保护继承
class DerivedProtected : protected Base {
public:
void derivedFunction() {
// 可以访问基类的公有成员
publicFunction();
// 也可以访问基类的保护成员
protectedFunction();
// 不能访问基类的私有成员
// privateFunction(); // Error
}
};
// 私有继承
class DerivedPrivate : private Base {
public:
void derivedFunction() {
// 可以访问基类的公有成员
publicFunction();
// 也可以访问基类的保护成员
protectedFunction();
// 不能访问基类的私有成员
// privateFunction(); // Error
}
};
int main() {
DerivedPublic derivedPublicObj;
derivedPublicObj.derivedFunction(); // 可以调用派生类的成员函数
DerivedProtected derivedProtectedObj;
// 在外部无法直接访问派生类的公有成员和保护成员
// derivedProtectedObj.derivedFunction(); // Error
DerivedPrivate derivedPrivateObj;
// 在外部无法直接访问派生类的公有成员和保护成员
// derivedPrivateObj.derivedFunction(); // Error
return 0;
}
在这个例子中:
-
公共继承: 派生类可以访问基类的公有和保护成员,但不能直接访问基类的私有成员。
-
保护继承: 派生类可以访问基类的公有和保护成员,但在外部无法直接访问派生类的公有成员和保护成员。
-
私有继承: 派生类可以访问基类的公有和保护成员,但在外部无法直接访问派生类的公有成员和保护成员。
这些区别反映了不同继承方式对派生类成员访问权限的影响。