C++:C++的两种多态形式
//
// 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++的两种多态形式的更多相关文章
- Oracle的sql语句的两种判断形式
Oracle的sql语句的两种判断形式 判断当前列同时改动当前列 判断一个情况改动其他值 一类情况详解:实现的是当num这一列的值为3时,就显示好 以此类推 1)case num when 3 the ...
- javascript中字符串的两种定义形式
1.var s = "this is a string"; var t = "this is also a string"; s.test = 20; 2.v ...
- WCF-异步调用和两种客户端形式
当发布一个服务端之后,客户端可以通过服务端的元数据,用VS2010添加服务引用的方式生成对应的代码.并且可以选择生成相应的异步操作. WCF实现代码,Add操作延时5秒后再返回结果. [Service ...
- Java线程的两种实现形式
一.创建线程的第一种方式:继承Thread类 class Demo extends Thread{ @Override public void run() { super.run(); for(int ...
- MFC添加菜单资源与菜单执行函数的两种命令形式
添加资源->新建一个菜单资源->选择相应的对话框 菜单的执行函数命令形式: COMMAD 是指点击菜单后的执行命令 UPDATE_COMMAND_UI 是指点击菜单后菜单状态的函数
- Tree的两种存储形式
1.xml存储 2.链式结构存储 List<Node> nodes = new List<Node>() { , Name = "中国" }, , Name ...
- NGUI 按钮点击事件的两种绑定形式
面板属性栏绑定 写一个脚本,定义一个Public的方法 Notify中选择物体时,选中自己 然后就可以选择通知到写的那个脚本的里边的public方法 代码绑定 创建一个代码文件,挂载到按钮对象上 代码 ...
- java中的堆、栈、常量池以及String类型的两种声明
参考自http://blog.sina.com.cn/s/blog_798b04f90100ta67.html http://www.cnblogs.com/fguozhu/articles/2661 ...
- ios的UIImage的两种不同的图片加载方式 tom猫
在ios的UI交互设计时,对图片的处理是难免的:不同的处理方式会对内存有不同的影响: ********************************************************* ...
随机推荐
- Oracle 11g 新特性之Highly Available IP(HAIP)
Redundant Interconnect with Highly Available IP (HAIP) 简介 从11.2.0.2开始,Oracle 的集群软件Grid Infrastruct ...
- 9.JAVA中的正则表达式
一.JAVA中的正则表达式 1.概念:以某种特定的方式描述字符串 1.Java中正则表达式的规则 ? #{0,1}-?有一个-或者没有 \\ #表示一个" ...
- java中定时器的四种方法
package com.lid; import java.util.Calendar; import java.util.Date; import java.util.Timer; import ja ...
- ScrollView控件实现屏幕滚动
滚动视图是指当拥有很多内容,屏幕显示不完全时,需要通过滚动来显示完整的视图 ScrollView的种类: (1)水平滚动视图:HorizontalScrollView (2)垂直滚动视图:Scroll ...
- sublime代码片段
创建方法:Tools > New Snippet 这时你会看到如下示例代码: <snippet> <content><![CDATA[ Hello, ${ ...
- nodejs review-02
30 Receive POST data POST接受JSON数据处理; //req. res都是可读的stream; http.createServer(function (req, res) { ...
- LinQ和ADO.Net增删改查 备忘
是否些倦了 SqlConnection conn=new SqlConnection();一系列繁冗的代码? 来试试Linq吧 查: using System.Data.SqlClient; name ...
- zookeeper选举原理
zookeeper的领导者选举和原子广播 目录: 1.工作原理概述 2.Fast Leader选举算法(领导者选举) 3.Leader与Follower同步数据(原子广播) ...
- Linux下redis的安装
第一部分:安装redis 希望将redis安装到此目录 /usr/local/redis 希望将安装包下载到此目录 /usr/local/src 那么安装过程指令如下: $ mkdir /usr/lo ...
- scala shuffle
val arr = (0 to 100).map(_ * 1d) /// 下面这一步只能用to不能用until,scala里面实现返回的两个Range继承路径不同,不能混用 val a_shuffle ...