基於C++的多態性動態判斷函數

來源:互聯網
上載者:User

標籤:ecif   log   dynamic   返回   func   一個   rtu   amp   nullptr   

這裡先有一個問題:

問題描述:函數int getVertexCount(Shape * b)計算b的頂點數目,若b指向Shape類型,傳回值為0;若b指向Triangle類型,傳回值為3;若b指向Rectangle類型,傳回值為4。

其中,Triangle和Rectangle均繼承於Shape類。

此問題的主函數已規定如下:

int main() {    Shape s;    cout << getVertexCount(&s) << endl;    Triangle t;    cout << getVertexCount(&t) << endl;    Rectangle r;    cout << getVertexCount(&r) << endl;}

分析:首先,問題要求的即類似與Java和C#中的反射機制,這裡我們考慮使用dynamic_cast函數,關於用法,我們先看一段函數:

//A is B‘s fathervoid my_function(A* my_a){    B* my_b = dynamic_cast<B*>(my_a);    if (my_b != nullptr)        my_b->methodSpecificToB();    else        std::cerr << "  Object is not B type" << std::endl;}

只要對對象指標是否是nullptr即可判斷該對象運行是是哪個類的對象,全部代碼如下:

#include <cstdio>#include <cstring>#include <iostream>using namespace std;class Shape{public:Shape() {}virtual ~Shape() {}};class Triangle : public Shape{public:Triangle() {}~Triangle() {}};class Rectangle : public Shape {public:Rectangle() {}~Rectangle() {}};/*用dynamic_cast類型轉換操作符完成該Function Computeb的頂點數目,若b指向Shape類型,傳回值為0;若b指向Triangle類型,傳回值為3;若b指向Rectangle類型,傳回值為4。*/int getVertexCount(Shape * b){Triangle* my_triangle = dynamic_cast<Triangle*>(b);if (my_triangle != nullptr){//說明是Trianglereturn 3;}Rectangle* my_Rectangle = dynamic_cast<Rectangle*>(b);if (my_Rectangle != nullptr){//說明是Rectanglereturn 4;}return 0;}int main() {Shape s;cout << getVertexCount(&s) << endl;Triangle t;cout << getVertexCount(&t) << endl;Rectangle r;cout << getVertexCount(&r) << endl;}

 

基於C++的多態性動態判斷函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.