C語言模擬實現C++的繼承與多態示例。本站提示廣大學習愛好者:(C語言模擬實現C++的繼承與多態示例)文章只能為提供參考,不一定能成為您想要的結果。以下是C語言模擬實現C++的繼承與多態示例正文
作者:snow_5288
本篇文章主要介紹了C語言模擬實現C++的繼承與多態示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧一、面向過程編程與面向對象編程的區別
眾所周知,C語言是一種典型的面向過程編程語言,而C++確實在它的基礎上改進的一款面向對象編程語言,那麼,面向過程與面向對象到底有什麼樣的區別呢?
【從設計方法角度看】
面向過程程序設計方法采用函數(或過程)來描述對數據的操作,但又將函數與其操作的數據分離開來。
面向對象程序設計方法是將數據和對象的操作封裝在一起,作為一個整體來處理。
【從維護角度看】
面向過程程序設計以過程為中心,難於維護。
面向對象程序設計以數據為中心,數據相對功能而言,有較強的穩定性,因此更易於維護。
二、繼承與多態的概念
繼承:是面向對象最顯著的一個特性。繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性 和行為,並能擴展新的能力,已有類被稱為父類/基類,新增加的類被稱作子類/派生類。
多態:按字面的意思就是“多種狀態”。在面向對象語言中,接口的多種不同現方式即為多態。同一操作作 用於不同的對象,可以有不同的解釋,產生不同的執行結果,這就是多態性。簡單說就是允許基類的 指針指向子類的對象。
三、代碼實現C語言模擬繼承與多態
#pragma once
#include <iostream>
using namespace std;
//C++中的繼承與多態
struct A
{
virtual void fun() //C++中的多態:通過虛函數實現
{
cout<<"A:fun()"<<endl;
}
int a;
};
struct B:public A //C++中的繼承:B類公有繼承A類
{
virtual void fun() //C++中的多態:通過虛函數實現(子類的關鍵字virtual可加可不加)
{
cout<<"B:fun()"<<endl;
}
int b;
};
//C語言模擬C++的繼承與多態
typedef void (*FUN)(); //定義一個函數指針來實現對成員函數的繼承
struct _A //父類
{
FUN _fun; //由於C語言中結構體不能包含函數,故只能用函數指針在外面實現
int _a;
};
struct _B //子類
{
_A _a_; //在子類中定義一個基類的對象即可實現對父類的繼承
int _b;
};
void _fA() //父類的同名函數
{
printf("_A:_fun()\n");
}
void _fB() //子類的同名函數
{
printf("_B:_fun()\n");
}
void Test()
{
//測試C++中的繼承與多態
A a; //定義一個父類對象a
B b; //定義一個子類對象b
A* p1 = &a; //定義一個父類指針指向父類的對象
p1->fun(); //調用父類的同名函數
p1 = &b; //讓父類指針指向子類的對象
p1->fun(); //調用子類的同名函數
//C語言模擬繼承與多態的測試
_A _a; //定義一個父類對象_a
_B _b; //定義一個子類對象_b
_a._fun = _fA; //父類的對象調用父類的同名函數
_b._a_._fun = _fB; //子類的對象調用子類的同名函數
_A* p2 = &_a; //定義一個父類指針指向父類的對象
p2->_fun(); //調用父類的同名函數
p2 = (_A*)&_b; //讓父類指針指向子類的對象,由於類型不匹配所以要進行強轉
p2->_fun(); //調用子類的同名函數
}
運行結果:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。