我有一個程序,我有一個名爲花和子類玫瑰,莉莉,茉莉花的超級類。如何從C++的主函數訪問類中的私有構造函數?
花卉保護成員有2個描述花和公共成員功能的getter函數和一個純虛函數(稱爲字符串getColor()),用於打印子類花的顏色。它還有一個公共成員函數,可以打印每個花的特徵(void printFlower(string name))。
我想實現玫瑰,莉莉和茉莉花的類,我必須這樣做,而不使用類中的公共訪問修飾符。所以,類中的所有內容都必須被保護或私有(甚至是構造函數)。我知道Rose,Lily和Jasmine公開繼承了父類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;
}
我的任務是不使用的玫瑰,百合和茉莉花類公共訪問修飾符,但我可以公開繼承花,如果我想。那麼,有沒有辦法使用一個私人的構造函數(使用Flower作爲朋友)或類似的東西來實現這一點?
編輯:我意識到我提供的信息很少,所以我在這裏編輯問題。以下是我無法改變的Flower超級班的聲明。
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功能。我唯一的限制是我不能在玫瑰,莉莉和茉莉花的類聲明中使用公共訪問修飾符,但是我可以並且公開繼承花。即。上課玫瑰:public flower(){} 有沒有什麼辦法可以讓玫瑰,莉莉和茉莉花的所有成員變得私人或受保護?
顯示類'Flower' /'Rose'會更有趣...... – Jarod42
舌頭在臉頰的答案:使用'struct'而不是定義'Rose','Lily'等。 'class',那麼你不必使用'public'關鍵字。 – Angew
所以你想創建這些類的實例,但你不想讓構造函數公開。除此之外的任何理由都可以做到嗎?「? –