0

私はこの親クラスの呼び出しを持っています

Shape (ShapeTwoD.cpp)

彼は2つの子供クラスを取得しました

1 is Rectangle (Rectangle.cpp)
1 is Square (Square.cpp)

この変数呼び出し領域は Rectangle & Square で宣言されていますが、 Shape(親) では宣言されていません

だから私は領域の昇順でソートしようとしていましたが、領域は次の方法でアクセスできます

class->getArea();


vector<ShapeTwoD*> myVector;

//幅、高さなどのデータを形状に記録する期間。

myVector[arrayCount] = new Rectangle();
myVector[arrayCount].setWidth(inWidth);
myVector[arrayCount].setHeight(inHeight);
myVector[arrayCount].computeArea();

配列カウント ++;

//done record width , height and then compute area of the shape

myVector には現在、約 2 つの長方形と 1 つの正方形が含まれていると仮定します。

次に、領域の昇順で並べ替えたいと思います。

しかし、私の getArea() 関数は子クラスでしか利用できません。

私がこれをやろうとすると

sort(myVector.begin(),myVector.end(),funcAreaSort);

funcAreaSort を作成する場所がわかりません。次は、同じ形状クラス (長方形に対する長方形) または異なる形状クラス (形状に対する長方形) であると仮定して、子領域を送信する方法です。

getArea() で比較できるブール演算子のオーバーロードを作成し、どちらが良いかを確認する方法 a.getArea() > b.getArea() を返し、myVector をソートする方法

問題は、これらの関数をどこで作成するかです。main.cpp で無料のメソッドにすることを考えていましたが、ソートに失敗し、修飾子エラーのようなエラーでコンパイルされます。

error: passing 'const shapeTwoD' as 'this' argument of 'virtual double shapeTwoD::getArea()' discards qualifers.
error: passing 'const shapeTwoD' as 'this' argument of 'virtual double shapeTwoD::getArea()' discards qualifers.
4

1 に答える 1

1

1)compare関数をShapeTwoD*パラメーターとして受け取りvirtual getArea、子でオーバーライドする基本クラスのメソッドを作成します。

2)メソッドを作成しgetArea constます:

int getArea() const;

const論理的に意味があり、オブジェクトで呼び出すことができるからです。

于 2012-10-30T21:37:43.303 に答える