在C++中,所谓“继承”就是在一个已存在的类的基础上建立一个新的类。已存在的类(例如“马”)称为“基类(base class )”或“父类(father class )”。新建的类(例如“公马”)称为“派生类(derived class )”或“子类(son class )”。

以上介绍的是最简单的情况:一个派生类只从一个基类派生,这称为单继承(single
inheritance)
,这种继承关系所形成的层次是一个树形结构。一个派生类不仅可以从一个基类派生,也可以从多个基类派生。一个派生类有两个或多个基类的称为多重继承(multiple
inheritance)
。关于基类和派生类的关系,可以表述为:派生类是基类的具体化,而基类则是派生类的抽象。

声明派生类的一般形式为

   class 派生类名:[继承方式] 基类名{派生类新增加的成员};

继承方式包括: public (公用的),private (私有的)和protected(受保护的),此项是可选的,如果不写此项,则默认为private(私有的)。

Eg:

class
a :b

{

};

一个类的继承方式如果被制定为私有,那么在子类中它在子类中的所有成员都将是私有的。如果被指定为protected,则父类中public的成员在子类中变为protected(protected 和 private都不变化),如果被指定为public 那么所有都不变。

#include <iostream>
#define PI 3.1415926
using namespace std;
class Pointer
{
public:
Pointer(){}
Pointer(double a,double b):x(a),y(b){}
protected:
double x;
double y;
friend ostream &operator<<(ostream& out,Pointer &P);
};
ostream &operator<<(ostream& out,Pointer &P)
{
cout<<" Pointer: x,y is "<<P.x<<","<<P.y<<endl;
return out;
} class Circle:public Pointer
{
public:
Circle(){}
Circle(double a,double b,double dr):Pointer(a,b),r(dr){}
protected:
double r;
public:
double get_area()
{ return PI*r*r;
}
friend ostream &operator<<(ostream& out,Circle &c);
};
ostream &operator<<(ostream& out,Circle &c)
{
cout<<"Circle: radius :"<<c.r;
out<<c.x<<endl;
out<<c.y<<endl;
return out;
}
class Cylinder:Circle
{
public:
Cylinder(){}
Cylinder(double a,double b,double c,double d):Circle(a,b,c),h(d)
{
}
protected:
double h;
public:
double get_Volume()
{
return Circle::get_area()*h;
}
double get_area()
{
return 2*Circle::get_area()+2*PI*r*h;
}
friend ostream &operator<<(ostream& out,Cylinder &c);
};
ostream &operator<<(ostream& out,Cylinder &c)
{
cout<<"cylinder dimensions"<<endl;
cout<<"x: "<<c.x<<endl;
cout<<"y: "<<c.y<<endl;
cout<<"radius "<<c.r<<endl;
cout<<"height "<<c.h<<endl;
return out;
}
int main()
{
Pointer p(2,3);
Circle c(7,5,6);
Cylinder cy(10,12,11,13);
cout<<p;
cout<<c;
cout<<"area of circle :"<<c.get_area()<<endl;
cout<<cy;
cout<<"area of cylinder base is "<<cy.get_area()<<endl;
return 0;
}

[置顶] c++类的继承(inheritance)的更多相关文章

  1. Inheritance, Association, Aggregation, and Composition 类的继承,关联,聚合和组合的区别

    在C++中,类与类之间的关系大概有四种,分别为继承,关联,聚合,和组合.其中继承我们大家应该都比较熟悉,因为是C++的三大特性继承Inheritance,封装Encapsulation,和多态Poly ...

  2. [置顶] Android开发笔记(成长轨迹)

    分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...

  3. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  4. Javascript笔记----实现Page页面右下角置顶按钮.

    从用博客开始,发现博客园中很多博友的博客中在Page右下角都有个图标,不论屏幕怎么拉伸,都始终停留在右下角.点击后页面置顶.后面想想写一个Demo来实现这种效果吧. 一. 图标右下角固定. 1.SS ...

  5. python3 入门 (四) 类与继承

    Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. p ...

  6. Android自定义ScrollView实现一键置顶功能

    效果图如下: (ps:动态图有太大了,上传不了,就给大家口述一下要实现的功能吧) 要实现的功能:当ScrollView向上滑动超过一定距离后,就渐变的出现一个置顶的按钮,当滑动距离小于我们指定的距离时 ...

  7. Android的SwipeToDismiss第三方开源框架模拟QQ对话列表侧滑删除,置顶,将头像图片圆形化处理。

      <Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(github ...

  8. 让WPF的Popup不总置顶的解决方案

    使用WPF的Popup的时候会发现有一个问题,它总是会置顶,只要Popup的StayOpen不设置为False,它就一直呆在最顶端,挡住其他的窗口. 解决方案是继承Popup重新定义控件PopupEx ...

  9. [置顶]VC2013的一个bug

    [置顶]VC2013的一个bug 前段时间在尝试使用一个C++的GUI库nana.这个库最大的特点在于使用现代C++风格去编写GUI程序,而不需要使用大量的比较丑陋的代码(如MFC中的各种宏),或者其 ...

随机推荐

  1. CCR

    不用任何与创建线程.资源互斥有关系的API写多线程程序 这次的例子,是一个很简单的控制台,她将面对瞬间提交的百万的数据,而面不改色(CPU.内存非常平稳),队列中始终只保存最新的数据,每次只处理cpu ...

  2. [OFBiz]简介 二

    1. 执行ant run-install后,生成了55个ofbiz的jar.加上最初的E:\apache-ofbiz-10.04\framework\entity\lib\ofbiz-minerva. ...

  3. bug描述注意点

    一个好的错误跟踪系统包括了错误的必要信息,如果做得不好,会造成迷惑,并误导读者.好的故障描述应该包括十个基本部分:标题.项目.所属模块.优先级.重要性.异常等级.可重复性.现象.操作过程和附件. ①标 ...

  4. Makefile编程

    [个人体会]0.1 项目文件要合理分隔,功能模块分开放,分别设置Makefile自动编译,                        0.2 源码和头文件分开放,一个或多个头文件对应一个源码文件. ...

  5. fuse文件系统

    用户空间文件系统(Filesystem in Userspace,简称FUSE)是操作系统中的概念,指完全在用户态实现的文件系统.目前Linux通过内核模块对此进行支持.一些文件系统如ZFS,glus ...

  6. Django model中 双向关联问题,求帮助

    Django model中 双向关联问题,求帮助 - 开源中国社区 Django model中 双向关联问题,求帮助

  7. python 类和实例

    面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可 ...

  8. oracle 修改用户下部分表现有表空间

    工作日记之<修改用户表现有表空间> //user_tables可查询出当前登录用户的所有表,以及部分表信息,可以灵活运用于其他用途 //假设现有表空间TS1.TS2,需要迁移所有表空间TS ...

  9. js不验证

    给select添加了id,人家默认就有个id,id冲突导致js不验证

  10. linux搜索jar内容

    linux搜索  spring-beans-2.5.6.jar  内容 1.jar tvf spring-beans-2.5.6.jar -c  创建新的归档文件 -t  列出归档目录 -x  解压缩 ...