C++ 在cpp中实例化新对象

C++ 在cpp中实例化新对象,c++,class,constructor,new-operator,dynamic-allocation,C++,Class,Constructor,New Operator,Dynamic Allocation,我有三个类,叫做Starter、Pizza和甜点,每当创建一个对象时,它们都会接受不同数量的字符串输入,比如 //pizza takes 2 inputs Pizza p("margarita","large size"); //starter takes 3 inputs Starter s("ribs","bbq sauce","small size"); 但我想使用函数add()创建一个新对象,该函数接受一个字符串并将其与类匹配以创建一个新对象。乙二醇 add(string type)

我有三个类,叫做Starter、Pizza和甜点,每当创建一个对象时,它们都会接受不同数量的字符串输入,比如

//pizza takes 2 inputs
Pizza p("margarita","large size");

//starter takes 3 inputs
Starter s("ribs","bbq sauce","small size");
但我想使用函数add()创建一个新对象,该函数接受一个字符串并将其与类匹配以创建一个新对象。乙二醇

add(string type)
{
   if(type == "Pizza")
   {
     Pizza *p = new Pizza();
   }

   else if(type == "Starter ")
   {
     Starter *p = new Starter ();
   }
}
现在我的问题是,如何以用户友好的方式为类提供输入?通过用户友好,我认为用户可以在一行中编写一个类的所有输入,而不必使用cin获取每个输入

假设我们要吃披萨,那么我不想要的

cout<<"What type of pizza";
cin>>*input* <<endl;
cout<<"What size";
cin>>*input* <<endl;

cout*input*积分归@MuratKarakus。只是扩展他的答案以支持这种类型的输入
“margarita”、“large”

--------更新

下面的代码用于支持输入,如
“1/2玛格丽塔1/2烧烤德鲁克斯”,“大”


归功于@MuratKarakus。只是扩展他的答案以支持这种类型的输入
“margarita”、“large”

--------更新

下面的代码用于支持输入,如
“1/2玛格丽塔1/2烧烤德鲁克斯”,“大”


归功于@MuratKarakus。只是扩展他的答案以支持这种类型的输入
“margarita”、“large”

--------更新

下面的代码用于支持输入,如
“1/2玛格丽塔1/2烧烤德鲁克斯”,“大”


归功于@MuratKarakus。只是扩展他的答案以支持这种类型的输入
“margarita”、“large”

--------更新

下面的代码用于支持输入,如
“1/2玛格丽塔1/2烧烤德鲁克斯”,“大”



您想从stdin获取准确的输入吗?不是来自文件或其他什么?这将是一个简单的解析。使用
getline()
目前我正在使用getline分别获取每个输入,我可以使用一个getline()将两个输入一起获取吗@Mubashirhanifies,我只想从stdin而不是任何文件获取用户输入@MaxTeneOffGetLine()提供流中的完整行,以便在用户输入完整行作为输入时可以正常工作。。但是您必须确保用户在a行中输入每一项内容。一旦你有了一行,比如说用户输入了
“margarita”,“large”
,你就必须在
的基础上进行编码,如果你要求用户在输入中加入空格来格式化输入
“margarita”“large”
,那么使用@MuratKarakus Answer-bellow,这对你很有好处@SAFWANULLKARIM您想从stdin获取准确的输入吗?不是来自文件或其他什么?这将是一个简单的解析。使用
getline()
目前我正在使用getline分别获取每个输入,我可以使用一个getline()将两个输入一起获取吗@Mubashirhanifies,我只想从stdin而不是任何文件获取用户输入@MaxTeneOffGetLine()提供流中的完整行,以便在用户输入完整行作为输入时可以正常工作。。但是您必须确保用户在a行中输入每一项内容。一旦你有了一行,比如说用户输入了
“margarita”,“large”
,你就必须在
的基础上进行编码,如果你要求用户在输入中加入空格来格式化输入
“margarita”“large”
,那么使用@MuratKarakus Answer-bellow,这对你很有好处@SAFWANULLKARIM您想从stdin获取准确的输入吗?不是来自文件或其他什么?这将是一个简单的解析。使用
getline()
目前我正在使用getline分别获取每个输入,我可以使用一个getline()将两个输入一起获取吗@Mubashirhanifies,我只想从stdin而不是任何文件获取用户输入@MaxTeneOffGetLine()提供流中的完整行,以便在用户输入完整行作为输入时可以正常工作。。但是您必须确保用户在a行中输入每一项内容。一旦你有了一行,比如说用户输入了
“margarita”,“large”
,你就必须在
的基础上进行编码,如果你要求用户在输入中加入空格来格式化输入
“margarita”“large”
,那么使用@MuratKarakus Answer-bellow,这对你很有好处@SAFWANULLKARIM您想从stdin获取准确的输入吗?不是来自文件或其他什么?这将是一个简单的解析。使用
getline()
目前我正在使用getline分别获取每个输入,我可以使用一个getline()将两个输入一起获取吗@Mubashirhanifies,我只想从stdin而不是任何文件获取用户输入@MaxTeneOffGetLine()提供流中的完整行,以便在用户输入完整行作为输入时可以正常工作。。但是您必须确保用户在a行中输入每一项内容。一旦你有了一行,比如说用户输入了
“margarita”,“large”
,你就必须在
的基础上进行编码,如果你要求用户在输入中加入空格来格式化输入
“margarita”“large”
,那么使用@MuratKarakus Answer-bellow,这对你很有好处@safwanullkarim代码运行正常,但在您的替换中,是否有任何方法可以消除空间?因为我还想输入像“1/2玛格丽塔1/2烧烤德鲁克斯”,“大”@MubashirHanif@SafwanUllKarim对于一个完整的解决方案,你应该给我一个用户输入的完整格式。。对于输入的
“1/2玛格丽塔1/2 bbq delux”,“大”
这样的话,你可以先用一个已知字符替换所有空格。。说一个
。或者-
然后使用流返回部分输入并相应地解析它们。。我正在更新我的答案以再次支持您当前的输入!你帮了大忙@MubashirHanif@SafwanUllKarim别提了,伙计,我们有责任帮忙:代码有效,但在你的re中
// Read complete string.
// Eg. margarita large
string order;
getline(cin, order);

// It automatically parses string based on space
istringstream is(order);
string meal, size;
is >> meal;
is >> size;
// Read complete string.
// Eg. margarita large
string order;
getline(cin, order);

std::replace( order.begin(), order.end(), ',', ' '); // this'll replace all ',' with space

// It automatically parses string based on space
istringstream is(order);
string meal, size;
is >> meal;
is >> size;    
// Read complete string.
// Eg. margarita large
string order;
getline(cin, order);
std::replace( order.begin(), order.end(), ' ', '-'); // this'll replace all space with '-'
std::replace( order.begin(), order.end(), ',', ' '); // this'll replace all ',' with space
// It automatically parses string based on space
istringstream is(order);
string meal, size;
is >> meal;
std::replace( meal.begin(), meal.end(), '-', ' '); // this'll replace all '-' with space

is >> size;