C++:C++的两种多态形式

简介:
复制代码
 1 //
 2 //  main.cpp
 3 //  Test.cpp
 4 //
 5 //  Created by mac on 15/8/11.
 6 //  Copyright (c) 2015年. All rights reserved.
 7 //
 8 #include<iostream>
 9 #include<cstring>
10 using namespace std;
11 class Person    //基类Person
12 {
13 private:
14     string  name;
15     int age;
16 public:
17     Person();
18     virtual ~Person();//虚析构函数
19     Person(string name,int age);
20     void setname(string name);
21     void setage(int age);
22     virtual void show();//虚成员函数,子类继承后必须要重写该函数
23     //virtual void show()=0;//纯虚函数,此时该类就不能创建对象了。
24 };
25 Person::Person(){};
26 Person::Person(string name,int age)
27 {
28     this->name = name;
29     this->age = age;
30 }
31 void Person::setname(string name)
32 {
33     this->name = name;
34 }
35 void Person::setage(int age)
36 {
37     this->age = age;
38 }
39 void Person::show()
40 {
41     cout<<"name:"<<name<<","<<"age:"<<age<<endl;
42 }
43 Person::~Person(){};47 class Student:public Person//基类Person的公有派生类Studnet
48 {
49 private:
50     float score;
51     string subject;
52 public:
53     Student();
54     virtual ~Student();//virtual可加可不加
55     virtual void show();//virtual可加可不加
56     Student(string name,int age,float score,string subject);
57 };
58 Student::Student(){};
59 Student::Student(string name,int age,float score,string subject):Person(name,age)
60 {
61     this->score = score;
62     this->subject = subject;
63 }
64 void Student::show()
65 {
66     Person::show();
67     cout<<"score:"<<score<<","<<"subject:"<<subject<<endl;
68 }
69 Student::~Student(){};
70 int main(int argc, const char * argv[])
71 {
72     Person p;
73     p.setname("xiayuanquan");
74     p.setage(23);
75     p.show();
76     
77     Student stu("lisi",23,98.5,"English");
78     stu.show();
79     
80     //多态的特性(例1)父类的引用指向子类对象
81     Person person;
82     Student st("chenglong",60,99,"chinese");
83     person = st;
84     st.show();
85     
86     //多态的特性(例2)父类的指针指向子类对象
87     Person *p2 = new Student("zhangsan",20,100,"math");
88     p2->show();
89     
90     return 0;
91 }
复制代码

   程序运行结果:

复制代码
name:xiayuanquan,age:23
name:lisi,age:23
score:98.5,subject:English
name:chenglong,age:60
score:99,subject:chinese
name:zhangsan,age:20
score:100,subject:math
Program ended with exit code: 0
复制代码

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

1.存在继承关系

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

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

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!


本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4721666.html,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
安全 编译器 C++
C++ 多态深入解析
C++ 多态深入解析
49 0
|
7月前
|
存储 弹性计算 JavaScript
面向对象-1:类的定义
本实验将介绍TypeScript中类的定义
25 0
|
6月前
面向对象设计领域中的参数多态,包含多态,过载多态和强制多态
面向对象设计领域中的参数多态,包含多态,过载多态和强制多态
83 1
|
4月前
|
Java
Java面向对象编程,解释封装、继承和多态的概念。
Java面向对象编程,解释封装、继承和多态的概念。
39 2
|
9月前
|
C语言 C++
<c++> 类与对象 | 面向对象 | 访问说明符 | 类的声明 | 创建类
<c++> 类与对象 | 面向对象 | 访问说明符 | 类的声明 | 创建类
70 0
|
8月前
多态性的使用举例
多态性的使用举例
29 0
|
9月前
|
C# C++
多态的理解以及作用
多态的理解以及作用
|
10月前
|
C++
动态绑定,多态(带你从本质了解多态)(下)
动态绑定,多态(带你从本质了解多态)
|
12月前
|
Java 数据安全/隐私保护
14 java面向对象的三大特征【继承、封装、多态】
封装的实现: 实现三部曲: ①私有化,属性 ②提供公共的getXxx()方法 ②提供公共的setXxx()方法
83 0
|
安全 Java 程序员
Java面向对象之组合与多态
本篇文章是上一篇包和继承文章的后续篇,针对面向对象编程的组合、多态、抽象类与接口方面内容的总结分享,希望各位小主们认真浏览,一定会受益多多哟
86 0
Java面向对象之组合与多态