- public继承
- 基类public成员:在派生类中仍为public成员。
- 基类protected成员:在派生类中仍为protected成员。
- 基类private成员:在派生类中不可访问。
- 示例代码:
#include <iostream>
class Base {
public:
int publicVar;
void publicFunc() { std::cout << "Base public function" << std::endl; }
protected:
int protectedVar;
void protectedFunc() { std::cout << "Base protected function" << std::endl; }
private:
int privateVar;
void privateFunc() { std::cout << "Base private function" << std::endl; }
};
class PublicDerived : public Base {
public:
void accessBaseMembers() {
publicVar = 10;
publicFunc();
protectedVar = 20;
protectedFunc();
// privateVar = 30; // 编译错误,无法访问基类private成员
// privateFunc(); // 编译错误,无法访问基类private成员
}
};
int main() {
PublicDerived pd;
pd.publicVar = 100;
pd.publicFunc();
// pd.protectedVar = 200; // 编译错误,外部无法访问protected成员
// pd.protectedFunc(); // 编译错误,外部无法访问protected成员
return 0;
}
- protected继承
- 基类public成员:在派生类中变为protected成员。
- 基类protected成员:在派生类中仍为protected成员。
- 基类private成员:在派生类中不可访问。
- 示例代码:
#include <iostream>
class Base {
public:
int publicVar;
void publicFunc() { std::cout << "Base public function" << std::endl; }
protected:
int protectedVar;
void protectedFunc() { std::cout << "Base protected function" << std::endl; }
private:
int privateVar;
void privateFunc() { std::cout << "Base private function" << std::endl; }
};
class ProtectedDerived : protected Base {
public:
void accessBaseMembers() {
publicVar = 10;
publicFunc();
protectedVar = 20;
protectedFunc();
// privateVar = 30; // 编译错误,无法访问基类private成员
// privateFunc(); // 编译错误,无法访问基类private成员
}
};
int main() {
ProtectedDerived pd;
// pd.publicVar = 100; // 编译错误,外部无法访问protected成员
// pd.publicFunc(); // 编译错误,外部无法访问protected成员
return 0;
}
- private继承
- 基类public成员:在派生类中变为private成员。
- 基类protected成员:在派生类中变为private成员。
- 基类private成员:在派生类中不可访问。
- 示例代码:
#include <iostream>
class Base {
public:
int publicVar;
void publicFunc() { std::cout << "Base public function" << std::endl; }
protected:
int protectedVar;
void protectedFunc() { std::cout << "Base protected function" << std::endl; }
private:
int privateVar;
void privateFunc() { std::cout << "Base private function" << std::endl; }
};
class PrivateDerived : private Base {
public:
void accessBaseMembers() {
publicVar = 10;
publicFunc();
protectedVar = 20;
protectedFunc();
// privateVar = 30; // 编译错误,无法访问基类private成员
// privateFunc(); // 编译错误,无法访问基类private成员
}
};
int main() {
PrivateDerived pd;
// pd.publicVar = 100; // 编译错误,外部无法访问private成员
// pd.publicFunc(); // 编译错误,外部无法访问private成员
return 0;
}