C++ 类,公有继承,保护继承,私有继承

2 篇文章 0 订阅

转自:http://hi.baidu.com/秀才太守

C++不同于C的一个特征就是引入了类的概念,本文就类的公有变量(函数),保护变量(函数),私有变量(函数)以及公有继承,保护继承,私有继承做一个记录。

参考了林锐博士的《高质量程序设计指南》,《程序员宝典》及网络上面的一些帖子。

先来写一个基类:

class parent
{
public:
parent(int zz = 99):face(zz),possession(zz),secret(zz)
{
   /*构造函数*/
}
public:
int face; /*公有变量*/
protected:
int possession;/*保护变量*/
private:
int secret;/*私有变量*/
};

对于公有变量(函数)的理解,就像是你的名字,相貌等都是可以公开的,可以继承(遗传)。

对于保护变量(函数)的理解,就像是你的财产等,是受保护的,只有你和你的继承者可以使用。

对于私有变量(函数)的理解,就像是你的机密,罪过等是隐藏的,只有你自己才可以看到。

那么,公有继承,保护继承,私有继承的区别呢?

先看下面的代码:

class sonLiveWithParent : public parent
{
/*公有继承方式,跟父母一起生活的孩子*/
public:
int faceGet()
{
   return face;
}/*基类的公有可访问*/
int possessionGet()
{
   return possession;
}/*基类的保护可访问*/
/*int secretGet() 
{
   return secret;
}*//*基类的私有不可访问*/
};
class sonAdoptived : protected parent
{
/*保护继承方式,收养的孩子*/
public:
int faceGet()
{
   return face;
}/*基类的公有可访问*/
int possessionGet()
{
   return possession;
}/*基类的保护可访问*/
/*int secretGet()
{
   return secret;
}*//*基类的私有不可访问*/
};
class sonLiveAwayFromParent : private parent
{
/*私有继承,父母在外流浪的孩子*/
public:
int faceGet()
{
   return face;
}/*基类的公有可访问*/
int possessionGet()
{
   return possession;
}/*基类的保护可访问*/
/*int secretGet()
{
   return secret;
}*//*基类的私有不可访问*/
};
int main()
{
sonLiveWithParent s1;
sonAdoptived s2;
sonLiveAwayFromParent s3;
int zz = 999;
 
/*公有继承测试*/
s1.face = zz;/*基类的公有可修改*/
//s1.possession = zz;/*错误,基类的保护不可修改*/
 
/*保护继承测试*/
//s2.face = zz;/*错误,基类的公有不可修改*/
//s2.possession = zz;/*错误,基类的保护不可修改*/
/*私有继承测试*/
//s3.face = zz;/*错误,基类的公有不可修改*/
//s3.possession = zz;/*错误,基类的保护不可修改*/
return 0;
}

公有继承就像是有父母在身边照顾的小孩,饱受父母的温暖,享有父母的一切(public和protected的成员),即:公有继承类可以访问基类的public和protected,而且可以修改。

私有继承就像是流浪在外的孩子,不能拥有父母的住房和财产,即:公有继承类可以访问基类的public和protected,但不可以修改。

保护继承就像是收养的孩子,跟父母并没有血缘关系,不能拥有父母的住房和财产,即:公有继承类可以访问基类的public和protected,但不可以修改。

从上面看,私有继承和保护继承并没有什么区别,再看下面的代码:

class grandsonAdoptived : public sonAdoptived
{
public:
int faceGet()
{
   return face;
}
int possessionGet()
{
   return possession;
}
/*int secretGet()
{
   return secret;
}*/
};
class grandsonLiveAway : public sonLiveAwayFromParent
{
public:
/*int faceGet()
{
   return face;
}
int possessionGet()
{
   return possession;
}
/*int secretGet()
{
return secret;
}*//*错误,均不能访问*/
};

保护继承可以继续被继承,而且可以访问基类的public和protected,但不可以修改。

私有继承也可以继续被继承,但已经被私有化,无法访问基类的public和protected。

如果类的继承不写关键字,C++默认为私有继承。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值