【C++】类的承继的深入探讨
承继是扩展现有类并为基类供给新功能的一种方法。
本文首要讨论一个问题:子类会包含父类所包含的全部吗?
起先,作者以为这个问题的答案是否定的,由于子类无法拜访父类的private成员
可是,运转下述一个简易的示例代码,得到Entity类和Player类的巨细分别是8和16。
#include<iostream>
class Entity {
private:
float X, Y;
};
class Player : public Entity {
public:
const char* Name;
};
int main() {
std::cout << sizeof(Entity) << std::endl;
std::cout << sizeof(Player) << std::endl;
std::cin.get();
return 0;
}
其间,Entity类的巨细为两个int成员(巨细为4)之和,Player类的巨细正好为Entity的两个int成员与字符指针Name(64位巨细为8,32位巨细为4,这里是64位)之和。
这也证明了Player类包含了Entity类,因而问题的答案是必定的。
当X和Y设为Entity的私有成员时,虽然Player的目标无法拜访X和Y,但派生类会承继基类的一切成员,包含私有成员。
即便这些私有成员不能直接被派生类拜访,它们仍然是类目标内存布局的一部分。
这一起也证明了C++的可见性(private、protected、public)修饰符仅仅约束了拜访权限,标准编程,对程序的实践运转方法和功能没有影响。
如文章有误或遗漏,欢迎谈论指出
如有协助,欢迎重视我的博客,后续也会更新其他的技能内容(坚持日更ing)
特别引荐 Cherno 的C++课程,能够去某管订阅他的频道,B站也有转载