1. 程式人生 > >C8-3 三角形還是長方形? (100/100 分數)

C8-3 三角形還是長方形? (100/100 分數)

too 轉換成 使用 return 查找 AC RM pre ptr

題目描述

在多態概念中,基類的指針既可以指向基類的對象,又可以指向派生類的對象。我們可以使用dynamic_cast類型轉換操作符來判斷當前指針(必須是多態類型)是否能夠轉換成為某個目的類型的指針。

同學們先查找dynamic_cast的使用說明(如http://en.wikipedia.org/wiki/Run-time_type_information#dynamic_cast),然後使用該類型轉換操作符完成下面程序(該題無輸入)。

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

#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類型轉換操作符完成該函數*/
int getVertexCount(Shape * b){
}

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



輸入描述


輸出描述


樣例輸入


樣例輸出

#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類型轉換操作符完成該函數*/ int getVertexCount(Shape * b){ Rectangle* rectangle = dynamic_cast<Rectangle*>(b); if (rectangle != nullptr) return 4; Triangle* triangle = dynamic_cast<Triangle*>(b); if (triangle != nullptr) return 3; return 0; } int main() { Shape s; cout << getVertexCount(&s) << endl; Triangle t; cout << getVertexCount(&t) << endl; Rectangle r; cout << getVertexCount(&r) << endl; }

C8-3 三角形還是長方形? (100/100 分數)