C++笔记(5):继承和多态代码实现

Shape.h

 1 #ifndef SHAPE_H
 2 #define SHAPE_H
 3 #include<string>
 4 using std::string;
 5
 6 class IShape
 7 {
 8 public:
 9     virtual float getArea()=0;
10     virtual string getName()=0;
11 };
12
13 #endif

Circle.h

 1 #ifndef CIRCLE_H
 2 #define CIRCLE_H
 3 #include"Shape.h"
 4 class CCircle : public IShape
 5 {
 6 public:
 7     CCircle(float radius);
 8 public:
 9     virtual float getArea();
10     virtual string getName();
11
12 private:
13     float m_fRadius;
14 };
15
16 #endif

Circle.cpp

 1 #include"Circle.h"
 2
 3 CCircle::CCircle(float radius)
 4     :m_fRadius(radius)     //冒号表示初始化列表,m_fRadius表示变量名,radius表示变量初始值大小,注意不是继承符号
 5 {
 6 }
 7
 8 float CCircle::getArea()
 9 {
10     return 3.14 * m_fRadius * m_fRadius;
11 }
12
13 string CCircle::getName()
14 {
15     return "CCircle";
16 }

Rect.h

 1 #ifndef RECT_H
 2 #define RECT_H
 3 #include"shape.h"
 4 class CRect : public IShape
 5 {
 6 public:
 7     CRect(float nWidth, float nHeight);
 8
 9 public:
10     virtual float getArea();
11     virtual string getName();
12
13 private:
14     float  m_fWidth;
15     float  m_fHeight;
16 };
17
18
19 #endif

Rect.cpp

 1 #include"Rect.h"
 2
 3 CRect::CRect(float fWidth, float fHeight)
 4     :m_fWidth(fWidth), m_fHeight(fHeight)       //冒号同样表示初始化列表,不是继承符号,注意区分
 5 {
 6 }
 7
 8 float CRect::getArea()
 9 {
10     return m_fWidth * m_fHeight;
11 }
12
13 string CRect::getName()
14 {
15     return "CRect";
16 }

main.cpp

 1 #include<iostream>
 2 #include"Rect.h"
 3 #include"Circle.h"
 4 using namespace std;
 5
 6 int main()
 7 {
 8     IShape* pShape = NULL;
 9     pShape = new CCircle(20.2);         //基类的指针pShape指向派生类对象circle
10     cout<<pShape->getName()<<" "<<pShape->getArea()<<endl;
11
12     delete pShape;
13     pShape = new CRect(20, 10);     //基类的指针pShape指向派生类对象crect

14   cout<<pShape->getName()<<" "<<pShape->getArea()<<endl; 15 16   return 0; 17 }
时间: 2024-10-29 00:50:51

C++笔记(5):继承和多态代码实现的相关文章

课堂笔记--初识继承和多态 继承

第六章 初始继承和多态 继承:一个类可以使用另一个类的属性和方法(成为该类的成员) 子类继承父类使用的符号是冒号 子类不能继承父类的构造方法 子类不能访问父类的私有字段和方法 在调用子类构造的时候,没有使用base关键字调用父类的指定构造,那么默认调用父类的无参构造. 定义一个Person类 class Person { public string Name { get; set; } public Gender Sex { get; set; } public void SayHello()

Java学习笔记-4.继承与多态

一.继承机制 1.继承:允许一个类作为另一个类的扩充版本 2.单继承:一个类只继承了一个父类    多继承:一个类继承了多个父类 Java只支持单继承,C++支持多继承 二.类的继承 1.形式: class SubClass extends BaseClass { //子类类体,定义子类的新成员 } Java中所有的类都直接或间接地继承类 java.lang.Object 2.构造方法 (1)显式构造方法    形式:super(参数表); 系统执行到这条语句时,会根据参数表判断调用父类中哪个构

《Head First Java》读书笔记——7 继承与多态

(一)继承范例 1.范例一: 1 pulic class Doctor{ 2 boolean worksAtHospital; 3 void treatPatient(){ 4 //执行检查 5 } 6 } 7 public class FamilyDoctor extends Doctor{ 8 boolean makesHouseCalls; 9 void giveAdvice(){ 10 //提出诊断 11 } 12 } 13 public class Surgeon extends Do

新标准C++程序设计读书笔记_继承和多态

简单继承的例子: 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 class CStudent 6 { 7 private: 8 string name; 9 string id; //学号 10 char gender; //性别,'F'代表女, 'M'代表男 11 int age; 12 public: 13 void PrintInfo(); 14 void SetInfo( const

PM撸代码之Android【武侠篇:封装、继承、多态】

80 PM撸代码之Android[武侠篇:封装.继承.多态] 这是Android系列的第六篇文章,在之前的一篇文章中,已经了解了面向对象的基础概念,这一篇将会通过武侠江湖的类比,讲解面向对象的更多内容,感谢小伙伴们一直以来的支持. 武林门派的三个特征 1 独门秘籍(封装) 2 传承的门派(继承) 3 看情况使功夫和换个姿势说明问题(多态) [封装] 1 门派独门秘籍(封装) 前一篇已经说到,当达摩上了嵩山以后,江湖就正式进入门派时代.每个门派区别于其他门派,肯定是因为这个门派拥有独门武功秘籍.举

C++笔记(4):继承和多态实例总结

继承与多态 1.继承与派生的基础 2.派生类的使用 3.多态 4.抽象类 ------------------------------------------------------------------------------------------------------------------------------ 1.继承与派生的基础 面向对象编程的主要目的之一就是提供可重用的代码.强调可重用性.使用C语言进行编程时,可以使用C标准的各种函数.C++提供更高层次的重用,如类库.通过继

C++ Primer学习笔记(13)——封装、继承、多态

C++ 是一种典型的面向对象的编程语言,其最显著地特点是封装.继承和多态.充分理解封装.继承.多态是如何实现的,学好C++就不是难事了. 1.封装 封装是将多个细节元素组合在一起,隐藏起来,成为一个类.外部无法了解类内部是如何实现的,只需要考虑它的接口. 例如:将公司员工的姓名.年龄.工号等信息放在类的私有部分. 封装的好处: 避免类内部出现无意的.可能破坏对象状态的用户级错误. 随时间推移可以根据需求改变或缺陷报告来完善类实现,而无需改变用户级代码. 2.继承 该部分转自ruyue_ruyue

TypeScript笔记【2】类、继承、多态

和C++,C#那些可以面向对象的语言那样,TS也可以面向对象. 与JS相比,TS更像传统的面向对象语言(如Java,C#).所以,TS有类. 一.类 定义一个类,要用关键字[class]. class Animai {     name: string     eat(): void {         alert(this.name + '吃');     }     sleep(): void {         alert(this.name + '睡觉')     }     breat

非专业码农 JAVA学习笔记 4 java继承和多态

继承和多态 (一)继承的基本概念 子类 extends 父类(超类)(通过继承使用父类公用的变量,方法和属性等非private定义的) (二)类的继承 1.派生子类-获取父类非private定义的方法属性和相关的变量 2.域的隐藏和继承 (1)域的继承-继承所有非私有化的域 (2)域的隐藏-定义跟父类相同的变量,父类的变量就会在子类隐藏,但,子类执行自己的方法还是用的是子类的变量,执行继承父类的方法才自动用上隐藏的域 3.方法的继承和覆盖 (1)方法的继承-继承父类非私有的方法 (2)方法的覆盖