私はフラワーとサブクラスローズ、リリー、ジャスミンと呼ばれるスーパークラスを持っているプログラムを持っています。C++のmain関数からクラスのプライベートコンストラクタにアクセスするにはどうすればよいですか?
花の特徴を記述する2つの変数と、ゲッター関数を持つパブリックメンバーと、サブクラス花の色を印刷する純仮想関数(string getColor()と呼ばれる)を持つメンバーです。また、各花の特性を出力するパブリックメンバー関数も用意されています(void printFlower(string name))。
私はRose、Lily、Jasmineのクラスを実装しようとしています。クラス内のpublicアクセス修飾子を使用せずにクラスを実装する必要があります。したがって、クラス内のすべてが保護されているか、プライベートである(コンストラクタさえも)必要があります。私はローズ、リリー、ジャスミンが親クラスのFlowerから公に継承していることを知っています。私の主な機能には
は、私はこれを持っている:
int main(){
Rose rose;
Flower * pointer = &rose;
rose.printFlower("red");
Lily lily;
pointer = &lily;
lily.printFlower("white"); // not sure what color lilies are
Jasmine jas;
pointer = &jas;
jas.printFlower("orange");
return 0;
}
私の仕事は、ローズ、リリーとジャスミンのクラスでのパブリックアクセス修飾子を使用しないことですが、私がしたい場合、私は公に花を継承することができます。だから、これを達成するためにプライベートコンストラクタを使用する方法がありますか?
EDIT:私が提供した情報がどれほど少ないかを知ったので、ここで質問を編集しています。以下は私が変更できない花のスーパークラスの宣言です。
class Flower{
protected:
bool isPopular;
bool isThorny;
public:
Flower(bool isPopular, bool isThorny){
this->isPopular = isPopular;
this->isThorny = isThorny;
}
bool getIsPopular(){
return this->isPopular;
}
bool getIsThorny(){
return this->isThorny;
}
virtual string getColor() = 0;
void printFlower(string name){
cout << "A " << name << " has '" << this->getColor() << "' color and is "
<< (this->getIsThorny()?"":"not ") << "thorny, and is " << (this->getIsPopular()?"":"not ")
<< "very popular." << endl;
}
};
私の仕事は、画像内に、次の基本的である: Task for declaring derived-classes
タスクがちょうどメイン実行し、メインから呼び出された場合printFlower機能を印刷します。私が持っている唯一の制限は、Rose、Lily、Jasmineのクラス宣言の中でpublicアクセス修飾子を使うことができないということですが、私は花から公に継承することができます。すなわち、クラスRose:public Flower(){} Rose、Lily、Jasmineのメンバーを非公開にしたり、保護したりする方法はありますか?
: 'struct'の代わりに使用したなど' Rose'、 'Lily'を定義します'class'とすると' public'キーワードを使う必要はありません。 – Jarod42
冗談の解答を表示
– Angewこれらのクラスのインスタンスを作成したいが、makeコンストラクタをパブリックにしたくない。それ以上の理由は「これはできますか?」? –