面试题答案
一键面试公有继承(public)
- 基类公有成员:在派生类中仍为公有成员,派生类的成员函数以及通过派生类对象都可以访问。
- 基类私有成员:在派生类中不可访问,派生类的成员函数和对象都无法直接访问基类的私有成员。
- 基类保护成员:在派生类中为保护成员,派生类的成员函数可以访问,但通过派生类对象无法访问。
示例:
class Base {
public:
int public_member;
private:
int private_member;
protected:
int protected_member;
};
class PublicDerived : public Base {
public:
void accessMembers() {
public_member = 10;
// private_member = 20; // 错误,无法访问
protected_member = 30;
}
};
int main() {
PublicDerived obj;
obj.public_member = 40;
// obj.private_member = 50; // 错误,无法访问
// obj.protected_member = 60; // 错误,无法访问
return 0;
}
私有继承(private)
- 基类公有成员:在派生类中变为私有成员,派生类的成员函数可以访问,但通过派生类对象无法访问。
- 基类私有成员:在派生类中不可访问,派生类的成员函数和对象都无法直接访问基类的私有成员。
- 基类保护成员:在派生类中变为私有成员,派生类的成员函数可以访问,但通过派生类对象无法访问。
示例:
class Base {
public:
int public_member;
private:
int private_member;
protected:
int protected_member;
};
class PrivateDerived : private Base {
public:
void accessMembers() {
public_member = 10;
// private_member = 20; // 错误,无法访问
protected_member = 30;
}
};
int main() {
PrivateDerived obj;
// obj.public_member = 40; // 错误,无法访问
// obj.private_member = 50; // 错误,无法访问
// obj.protected_member = 60; // 错误,无法访问
return 0;
}
保护继承(protected)
- 基类公有成员:在派生类中变为保护成员,派生类的成员函数可以访问,但通过派生类对象无法访问。
- 基类私有成员:在派生类中不可访问,派生类的成员函数和对象都无法直接访问基类的私有成员。
- 基类保护成员:在派生类中仍为保护成员,派生类的成员函数可以访问,但通过派生类对象无法访问。
示例:
class Base {
public:
int public_member;
private:
int private_member;
protected:
int protected_member;
};
class ProtectedDerived : protected Base {
public:
void accessMembers() {
public_member = 10;
// private_member = 20; // 错误,无法访问
protected_member = 30;
}
};
int main() {
ProtectedDerived obj;
// obj.public_member = 40; // 错误,无法访问
// obj.private_member = 50; // 错误,无法访问
// obj.protected_member = 60; // 错误,无法访问
return 0;
}