//
// main.cpp
// Test.cpp
//
// Created by mac on 15/8/11.
// Copyright (c) 2015年. All rights reserved.
//
#include<iostream>
#include<cstring>
using namespace std;
class Person //基类Person
{
private:
string name;
int age;
public:
Person();
virtual ~Person();//虚析构函数
Person(string name,int age);
void setname(string name);
void setage(int age);
virtual void show();//虚成员函数,子类继承后必须要重写该函数
//virtual void show()=0;//纯虚函数,此时该类就不能创建对象了。
};
Person::Person(){};
Person::Person(string name,int age)
{
this->name = name;
this->age = age;
}
void Person::setname(string name)
{
this->name = name;
}
void Person::setage(int age)
{
this->age = age;
}
void Person::show()
{
cout<<"name:"<<name<<","<<"age:"<<age<<endl;
}
Person::~Person(){}; class Student:public Person//基类Person的公有派生类Studnet
{
private:
float score;
string subject;
public:
Student();
virtual ~Student();//virtual可加可不加
virtual void show();//virtual可加可不加
Student(string name,int age,float score,string subject);
};
Student::Student(){};
Student::Student(string name,int age,float score,string subject):Person(name,age)
{
this->score = score;
this->subject = subject;
}
void Student::show()
{
Person::show();
cout<<"score:"<<score<<","<<"subject:"<<subject<<endl;
}
Student::~Student(){};
int main(int argc, const char * argv[])
{
Person p;
p.setname("xiayuanquan");
p.setage();
p.show(); Student stu("lisi",,98.5,"English");
stu.show(); //多态的特性(例1)父类的引用指向子类对象
Person person;
Student st("chenglong",,,"chinese");
person = st;
st.show(); //多态的特性(例2)父类的指针指向子类对象
Person *p2 = new Student("zhangsan",,,"math");
p2->show(); return ;
}

程序运行结果:

name:xiayuanquan,age:
name:lisi,age:
score:98.5,subject:English
name:chenglong,age:
score:,subject:chinese
name:zhangsan,age:
score:,subject:math
Program ended with exit code:

总结:实现多态的三个条件:

1.存在继承关系

2.多态的第一种,父类的引用指向子类对象 或者 多态的第二种,父类的指针指向子类对象。

3.子类必须要重写父类的同名方法

C++:C++的两种多态形式的更多相关文章

  1. Oracle的sql语句的两种判断形式

    Oracle的sql语句的两种判断形式 判断当前列同时改动当前列 判断一个情况改动其他值 一类情况详解:实现的是当num这一列的值为3时,就显示好 以此类推 1)case num when 3 the ...

  2. javascript中字符串的两种定义形式

    1.var s = "this is a string";  var t = "this is also a string"; s.test = 20; 2.v ...

  3. WCF-异步调用和两种客户端形式

    当发布一个服务端之后,客户端可以通过服务端的元数据,用VS2010添加服务引用的方式生成对应的代码.并且可以选择生成相应的异步操作. WCF实现代码,Add操作延时5秒后再返回结果. [Service ...

  4. Java线程的两种实现形式

    一.创建线程的第一种方式:继承Thread类 class Demo extends Thread{ @Override public void run() { super.run(); for(int ...

  5. MFC添加菜单资源与菜单执行函数的两种命令形式

    添加资源->新建一个菜单资源->选择相应的对话框 菜单的执行函数命令形式: COMMAD 是指点击菜单后的执行命令 UPDATE_COMMAND_UI 是指点击菜单后菜单状态的函数

  6. Tree的两种存储形式

    1.xml存储 2.链式结构存储 List<Node> nodes = new List<Node>() { , Name = "中国" }, , Name ...

  7. NGUI 按钮点击事件的两种绑定形式

    面板属性栏绑定 写一个脚本,定义一个Public的方法 Notify中选择物体时,选中自己 然后就可以选择通知到写的那个脚本的里边的public方法 代码绑定 创建一个代码文件,挂载到按钮对象上 代码 ...

  8. java中的堆、栈、常量池以及String类型的两种声明

    参考自http://blog.sina.com.cn/s/blog_798b04f90100ta67.html http://www.cnblogs.com/fguozhu/articles/2661 ...

  9. ios的UIImage的两种不同的图片加载方式 tom猫

    在ios的UI交互设计时,对图片的处理是难免的:不同的处理方式会对内存有不同的影响: ********************************************************* ...

随机推荐

  1. 【bzoj1499】瑰丽华尔兹

    这名字听起来实在有点耳熟..? 好吧去年暑假就应该过的题...切了 先注意到,天使施魔法的次数不限:我们可以使得某个时刻在特定方向移动一段距离(最长的长度为那个时间段)然后怎么来考虑这个DP: T,X ...

  2. Linux 查杀病毒的常见命令

    1. 查看异常连接的网络端口及其对应的相应的进程 netstat -anlp | grep EST 2.看下相关的进程ID对应的可执行文件的位置 ps 2393 可以看到进程的可执行文件在哪? 3.临 ...

  3. BZOJ2454 : TopCoder SRM 463 RabbitPuzzle

    每种状态最多只有三种后继状态:中间往左跳,中间往右跳,两边往中间跳. 如果把它们分别看成左儿子.右儿子.父亲的话,那么会得到一些二叉树. 取出起始状态和终止状态往上跳$k$步的所有状态,其他状态我们只 ...

  4. spark API 介绍链接

    spark API介绍: http://homepage.cs.latrobe.edu.au/zhe/ZhenHeSparkRDDAPIExamples.html#aggregateByKey

  5. Spring Autowired 注入失败总是Null

    报错:NullPointerException 分析:错误原因是注入失败? <context:annotation-config/> <context:component-scan ...

  6. 尝试封装适用于权限管理的通用API

    谈谈我对权限系统的简单理解 最近一段时间在研究权限系统,在园子里看到个很牛逼的开源的基于DDD-Lite的权限管理系统,并有幸加入了作者的QQ群,呵呵,受到了很大的影响.对于权限管理我有我自己的一些简 ...

  7. mysql错误汇总

    1,mysql报Fatal error encountered during command execution的解决办法 连接字符串里加上 Allow User Variables=True 解决. ...

  8. NOSQL场景梳理

    Redis 场景:缓存,Session,消息发布订阅,产品属性分析,订单购买等强事务,计数等   Memcached 场景:读密集,写一般的缓存,Session   MongoDB 场景:数据显示,查 ...

  9. Spark 架构

    本文转之Pivotal的一个工程师的博客.觉得极好.   作者本人经常在StackOverflow上回答一个关系Spark架构的问题,发现整个互联网都没有一篇文章能对Spark总体架构进行很好的描述, ...

  10. for循环

    1.使用for循环输出矩形 public static void print1(int h,int w){        for(int i=0; i<h; i++){            f ...