C8-3 三角形還是長方形? (100/100 分數)
阿新 • • 發佈:2018-05-23
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 分數)