派生类是否包含有基类的private成员?
我一直对C++继承有一个问题不太明白,今天自己试了一下,终于明白了
如果基类有private的数据成员,那么派生类也会有对应的数据成员,只不过自身的成员函数不能访问,但是可以通过call基类的成员函数访问。
示例如下:
这个是基类
1 class person{ 2 public: 3 person(): name("no name"), age(0){} 4 person(std::string xname, size_t xage); 5 person(const person& obj); 6 person& operator=(const person& obj); 7 std::string get_name(); 8 void set_name(std::string); 9 10 private: 11 std::string name; 12 size_t age; 13 14 };
具体实现:
1 person::person(const person& obj){ 2 name = obj.name; 3 age = obj.age; 4 } 5 6 person& 7 person::operator=(const person& obj){ 8 name = obj.name; 9 age = obj.age; 10 return *this; 11 } 12 13 std::string 14 person::get_name(){ 15 return name; 16 } 17 18 void 19 person::set_name(std::string xname){ 20 name = xname; 21 }
这个是派生类
1 class father: public person{ 2 public: 3 father(){} 4 };
测试main函数:
1 int 2 main(void){ 3 father f; 4 5 std::cout << f.get_name() << std::endl; 6 f.set_name("Potter"); 7 std::cout << f.get_name() << std::endl; 8 9 return 1; 10 }
输出是
no name
Potter
另外根据我找到的一篇别人的博客,派生类主要要经过三个过程:
1. 吸收基类成员:除过构造和析构函数以外的所有成员全部吸收进入派生类中
2. 更改继承的成员:1)更改访问控制权限(根据继承类型还有成员在基类中的访问类型决定) 2)同名覆盖(派生类中同名成员覆盖掉基类中)
3. 添加派生类独有的成员。
还有要注意的是,派生类构造函数会调用基类相同类型的构造函数