[解決済み】継承されたメンバが許されないのはなぜですか?
2022-02-15 17:37:29
質問
私はC++の初心者ですが、抽象クラスと継承についての演習をしています。
これは私の抽象クラスです。
#ifndef SHAPE_H
#define SHAPE_H
class Shape
{
public:
virtual void area();
virtual void perimeter();
virtual void volume();
};
#endif
これは、抽象クラスを実装した私の具象クラスです。
#include <iostream>
#include <cmath>
#include "Shape.h"
using namespace std;
class Circle : public Shape
{
public:
Circle(int);
private:
int r;
};
Circle::Circle(int rad)
{
r = rad;
}
void Circle::area()
{
cout << "Area of this cirle = " << 3.14 * pow(r, 2) << endl;
}
void Circle::perimeter()
{
cout << "Perimeter of this cirle = " << 2 * 3.14 * r << endl;
}
void Circle::volume()
{
cout << "Volume is not defined for circle." << endl;
}
の下に赤い線が入りました。
area()
,
perimeter()
および
volume()
を私の
Circle
というクラスがあり、その中で
"Error: inherited member is not allowed"
. 授業のpptを見たり、ググってみたりしたのですが、答えが見つかりません。どんな助けでも感謝します。
どのように解決するのですか?
オーバーライドされた関数をクラス定義の一部として宣言する必要があります。
class Circle : public Shape
{
public:
Circle(int);
virtual void area(); // overrides Shape::area
void perimeter(); // overrides Shape::perimeter
virtual void volume();
private:
int r;
};
を使用することに注意してください。
virtual
は省略可能です。
n.m. が指摘したように、仮想デストラクタも
Shape
. また、その仮想関数をピュアバーチャル化するのもよいでしょう。
Shape
抽象的であること)
class Shape
{
public:
virtual ~Shape() {}
virtual void area() = 0;
virtual void perimeter() = 0;
virtual void volume() = 0;
};
関連
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] C++で仮想関数が必要な理由とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された