面试题答案
一键面试公有继承(public)
- 基类公有成员:在派生类中仍为公有成员,派生类对象可以访问,派生类的成员函数也可以访问。
- 基类保护成员:在派生类中仍为保护成员,派生类对象不能访问,派生类的成员函数可以访问。
- 基类私有成员:在派生类中不可访问,无论是派生类对象还是派生类的成员函数都无法直接访问。
示例代码:
class Base {
public:
int publicData;
protected:
int protectedData;
private:
int privateData;
};
class PublicDerived : public Base {
public:
void accessMembers() {
publicData = 10;
protectedData = 20;
// privateData = 30; // 编译错误,无法访问基类私有成员
}
};
int main() {
PublicDerived obj;
obj.publicData = 100;
// obj.protectedData = 200; // 编译错误,派生类对象无法访问保护成员
return 0;
}
保护继承(protected)
- 基类公有成员:在派生类中变为保护成员,派生类对象不能访问,派生类的成员函数可以访问。
- 基类保护成员:在派生类中仍为保护成员,派生类对象不能访问,派生类的成员函数可以访问。
- 基类私有成员:在派生类中不可访问,无论是派生类对象还是派生类的成员函数都无法直接访问。
示例代码:
class Base {
public:
int publicData;
protected:
int protectedData;
private:
int privateData;
};
class ProtectedDerived : protected Base {
public:
void accessMembers() {
publicData = 10;
protectedData = 20;
// privateData = 30; // 编译错误,无法访问基类私有成员
}
};
int main() {
ProtectedDerived obj;
// obj.publicData = 100; // 编译错误,派生类对象无法访问保护成员
// obj.protectedData = 200; // 编译错误,派生类对象无法访问保护成员
return 0;
}
私有继承(private)
- 基类公有成员:在派生类中变为私有成员,派生类对象不能访问,派生类的成员函数可以访问。
- 基类保护成员:在派生类中变为私有成员,派生类对象不能访问,派生类的成员函数可以访问。
- 基类私有成员:在派生类中不可访问,无论是派生类对象还是派生类的成员函数都无法直接访问。
示例代码:
class Base {
public:
int publicData;
protected:
int protectedData;
private:
int privateData;
};
class PrivateDerived : private Base {
public:
void accessMembers() {
publicData = 10;
protectedData = 20;
// privateData = 30; // 编译错误,无法访问基类私有成员
}
};
int main() {
PrivateDerived obj;
// obj.publicData = 100; // 编译错误,派生类对象无法访问私有成员
// obj.protectedData = 200; // 编译错误,派生类对象无法访问私有成员
return 0;
}