gpt4 book ai didi

c++ - 如何从 C++ 中的主函数访问类中的私有(private)构造函数?

转载 作者:太空宇宙 更新时间:2023-11-04 13:03:09 26 4
gpt4 key购买 nike

我有一个程序,其中有一个名为 Flower 的父类(super class)和 Rose、Lily、Jasmine 的子类。

flower protected 成员有 2 个变量描述花的特征,public 成员有 getter 函数和一个纯虚函数(称为 string getColor())打印子类花的颜色。它还有一个公共(public)成员函数,用于打印每朵花的特征 (void printFlower(string name))。

我正在尝试为 Rose、Lily 和 Jasmine 实现类,我必须在不使用类中的公共(public)访问修饰符的情况下这样做。因此,类中的所有内容都必须是 protected 或私有(private)的(甚至是构造函数)。我知道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;
}

我的任务是不在 Rose、Lily 和 Jasmine 类中使用公共(public)访问修饰符,但如果我愿意,我可以公开继承 Flower。那么,有什么方法可以使用私有(private)构造函数(使用 Flower 作为 friend )或类似的方法来实现这一点?

编辑:我意识到我提供的信息很少,所以我在这里编辑问题。以下是我无法更改的 Flower 父类(super class)的声明。

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

任务将只运行 main 并在从 main 调用时打印 printFlower 函数。我唯一的限制是我不能在 Rose、Lily 和 Jasmine 的类声明中使用 public 访问修饰符,但我可以并且确实从 flower 公开继承。 IE。玫瑰类:公共(public)花(){}有什么办法可以通过将其所有成员设为私有(private)或 protected 来编写 Rose、Lily 和 Jasmine?

最佳答案

像这样使用工厂函数

class FlowerFactory
{
Flower* getFlower(string flowerName)
{
if(flowerName == "Rose")
{
return new Rose();
}
if(flowerName == "Lily")
{
return new Lily();
}
if(flowerName == "Jasmine")
{
return new Jasmine();
}
}
}

//Base class
class Flower
{
};

class Jasmine : public Flower
{
//other things here..

friend FlowerFactory;
};

class Rose : public Flower
{
//other things here..

friend FlowerFactory;
};

class Lily : public Flower
{
//other things here..

friend FlowerFactory;
};

关于c++ - 如何从 C++ 中的主函数访问类中的私有(private)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43409359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com