在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. 430flash的操作

    大概印象:430的flash好像有点像arm的flash,只不过是arm的flash要比430的大很多,而且430的flash不同于E2PROOM,这一点需要值得注意 MSP430flash的基本特点 ...

  2. 设计模式_Mediator_调停者模式

    形象例子: 四个MM打麻将,相互之间谁应该给谁多少钱算不清楚了,幸亏当时我在旁边,按照各自的筹码数算钱,赚了钱的从我这里拿,赔了钱的也付给我,一切就OK啦,俺得到了四个MM的电话.调停者模式: 调停者 ...

  3. [原创]一种简单的cocos2d-x动态更新方案

    介绍一个曾经在cocos2d-x项目中使用过的动态更新方案,这个方案简单易行,针对小的项目非常有用. 这个方案有两个核心的关键词:JSON,MD5. 原理可以简单地概括为:服务端持有所有动态更新资源文 ...

  4. Yum本地源配置

    1.mount -t auto /dev/cdrom /mnt      使用光驱 mount -t iso9660 -o loop /home/software/rhel-server-6.4-x8 ...

  5. BNUOJ-29365 Join in tasks 简单数学

    题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=29365 首先排序,然后维护一个后缀,等差求下和就可以了.. //STATUS:C++_AC ...

  6. 在windows2012&2008中设置防火墙允许filezilla的passive模式

    添加入战规则, 允许程序和服务 "filezilla" 被连接 只允许21端口通过防火墙是不够的.

  7. [C++]VS2010功能设置

    VS2010快捷键设置 工具->选项->环境->键盘->[显示命令包含] 下面输入“对齐”关键字->窗口显示关于“对齐”的所有操作命令->选中“某一个”->[ ...

  8. Java字节码(.class文件)格式详解(一)

    原文链接:http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html 小介:去年在读<深入解析JVM>的时候写的,记得当时还 ...

  9. bzoj3261 可持久化trie

    容易想到题解. 总结一下区间异或和题: 1.转化成trie 2.注意空间稍微开大 3.不要一个数右移31位 4.考虑开头要不要插一个零 5.注意可持久get的时候区间是左开右闭,但这样会变成x-2,x ...

  10. MYSQL- 分页存储过程

    工作需要,用到MYSQL的分页功能,在网上找到一个不错的分页存储过程,代码整理了一下! 存储过程代码 CREATE PROCEDURE `sp_hj_splitpage`( in _pagecurre ...