1. 程式人生 > >C++:C++的兩種多型形式

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 }

相關推薦

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<

C語言面向物件程式設計虛擬函式與(3)

 在《 C++ 程式設計思想》一書中對虛擬函式的實現機制有詳細的描述,一般的編譯器通過虛擬函式表,在編譯時插入一段隱藏的程式碼,儲存型別資訊和虛擬函式地址,而在呼叫時,這段隱藏的程式碼可以找到和實際物件一致的虛擬函式實現。     我們在這裡提供

從零開始學C++之虛擬函式與(一)虛擬函式表指標、虛解構函式、object slicing與虛擬函式、C++物件模型圖

#include <iostream>using namespace std;class CObject {public:     virtual void Serialize()     {         cout << "CObject::Serialize ..." <&

C語言的三資料型別int、short int和long int

int資料型別的位數為16位,short int資料型別的位數也是16位。而long int的位數為32位,可用來儲存比較大的整數。  short int 和 long int可以縮寫為short 和 long。               C語言中的整型資料型別int、

讀《More Effective C++35個改善程式設計與設計的有效方法》之條款3絕對不要以方式處理陣列

有以下程式: <pre name="code" class="cpp">class Base { public: Base(int n = 0) : _b(n) {} int _b; }; class Devide : public Base { publ

CC語言前序建立二叉樹的方式和前序遍歷二叉樹的方法

#include<stdio.h> #include<stdlib.h> typedef struct BiTreeNode { int data; struct BiTre

C++ 類的定義方式

命名 c++ ech += esp set with aced spa 類內定義 class Teacher { private: string _name; int _age; public: Teacher() { printf("create teche

C#利用WebClient 方式下載文件

sys end adf ati stream pac pub 利用 static WebClient client = new WebClient(); 第一種 string URLAddress = @"http://files.cnblogs.com/x4646/tre

C#調用非托管C++DLL的方法

sso tro medium direction ive 之間 測試工程 win bug C#編寫的代碼屬於跨平臺的托管代碼,C++語言可以編寫托管(managed)和非托管(native)代碼。在C#與C++的混合編程中,經常會使用C#來調用native C++的DL

C#學習 小知識_的簡單實現_2018Oct

  多型的實現三步驟     1.父類   寫入方法  (抽象類必須定義抽象方法)     2.子類   繼承父類  重寫方法  (對父類抽象方法(或虛方法)進行重寫)  

C++設計模式-繼承與影響耦合性(最基礎的簡單工廠模式小例項)

繼承與多型影響耦合性(最基礎的簡單工廠模式小例項) 原理: 通過繼承和虛擬函式的方式修改某個子類對應函式的功能; 通過簡單工廠模式到底例項化誰; 如果要增加複雜的運算只有增加響應的子類,以及工廠的分支即可;   程式執行截圖如下:   目錄結構如

c++繼承和組合,,虛擬函式(c++後期繫結的本質)

組合和繼承,實現了程式碼的可擴充套件性和相容性。 多型是在虛擬函式上得到了支援。 多型的原理,函式的呼叫繫結: 把函式的呼叫和函式體相關聯稱為捆綁。當捆綁是在程式執行之前完成的,稱為早期捆綁。c語言只支援早期繫結。晚期捆綁,物件通過自身得到類的資訊,然後找

【LeetCode】1. Two Sum(數之和)-C++實現的方法

本題是一下公司的面試題: 問題描述:   問題求解: 使用無序容器unorder_map實現: #include <iostream> #include <vector> #include <cassert> #inclu

C++】C++封裝、繼承、小結

轉載地址:http://blog.csdn.net/ruyue_ruyue/article/details/8211809 面向物件的三個基本特徵 面向物件的三個基本特徵是:封裝、繼承、多型。其中,封裝可以隱藏實現細節,使得程式碼模組化;繼承可以擴充套件

C++ 面向物件程式設計之理解

#include <iostream> using namespace std; /* 多型的理解 其中面向物件四大特徵之一 其餘為封裝 抽象 繼承 可以簡單概括為“一個介面 多種方法” 1.其中C++多型性體現在編譯期多型和執行期多型 編譯期多型如模板函式,其

C++總結5——繼承與【轉】

一、繼承  1.C++的繼承  繼承有3種形式:私有繼承、保護繼承、公有繼承,預設的繼承方式是私有繼承。通常使用 public 繼承。 不論哪種繼承方式,派生類都是顯示的繼承類基的保護成員變數和函式和公有成員變數和函式,繼承方式只是限定在派生類中這兩種成員變數的

C++總結6——繼承與的筆試題【轉】

1————————————————— #include <iostream> using namespace std; class Base { public:     Base(int data):_ma(data)       {         co

C++程式設計案例教程——Cha7 總結

面向物件技術三大特性:繼承、類的封裝、多型。 7.1多型的描述 7.1.1多型的含義     多型是指具有繼承關係的類,擁有相同的介面(函式名、形參和返回值),並允許有各自不同的實現,且一個物件例項只有在呼叫共同介面時,才能確定呼叫是何種實現,即“一個介面,

C++使用void *傳遞個引數

不多說直接上程式碼 函式test只有一個傳入引數void *,但是我們有兩個需要傳入的引數 void test(void *names) { char name[128]; strcpy_s(

C++-new 的六重載形式

cts 剛才 情況 成員 return eof 方法 指定大小 完成 當寫出這樣的代碼的時候, 實際上有兩步操作: p = new P();   1.分配內存,  2.然後在分配好的內存之上初始化類成員.第二步是有構造函數完成的, 第一步就是new函數的工作.全局的ne