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.子類必需要重寫父類的同名方法指針