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 }

   程序運行結果:ios

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.存在繼承關係this

2.多態的第一種,父類的引用指向子類對象 或者 多態的第二種,父類的指針指向子類對象。spa

3.子類必需要重寫父類的同名方法指針

相關文章
相關標籤/搜索