派生类是否包含有基类的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. 添加派生类独有的成员。

 

还有要注意的是,派生类构造函数会调用基类相同类型的构造函数

 

posted on 2016-01-17 17:07  daghlny  阅读(2010)  评论(0编辑  收藏  举报

导航