类的可选实例

时间:2014-11-07 10:57:57

标签: c++ oop

您好我正在努力做以下事情。

如果从cmd行传递了一些变量,即..

 const char * outputtype1
 const char * outputtype2

后者可以为NULL。

如果在命令行中设置了outputtype2,那么我想创建一个类的实例。如何让这个类的实例可选。即..

 if(outputtype2)
 {
 cats thomas(outputtype2);
 }

然后我会像

一样使用它
thomas.eatfood(whiskers);

这就是令人不安的地方。显然,如果outputtype2为null,托马斯不存在,但为什么我不能这样做呢?

 if (outputtype2) 
 {
 cats thomas(outputtype2);
 }

没有错误 “托马斯”未在此范围内宣布。我担心我在这里错过了一些基本规则。

3 个答案:

答案 0 :(得分:5)

你可能想要boost::optional<cats>。这允许您预先定义thomas,并且当{并且仅当它可用时'将cats(outputtype2)分配给托马斯。

结果是,在使用thomas时,您必须检查它是否实际分配给。{/ p>

答案 1 :(得分:2)

如果我理解你的问题,问题是你在if范围内创建了类的实例。之后你试着调用对象thomas的方法eatfood,但是当前范围内没有对象。

也许你想这样做......

if (outputtype2) {
  cats thomas(outputtype1);
  thomas.eatfood(whiskers);
}

或使用指针......

Cats* thomas = NULL;

if (outputtype2) {
  thomas = new Cats(outputtype1);
}

if (thomas != NULL) {
  thomas->eatfood(whiskers);
}

答案 2 :(得分:0)

您错过的是可变范围和可见性的概念。 当你写:

if(outputtype2)
 {
 cats thomas(outputtype2);
 }

这意味着变量thomas仅存在于声明的块中。在它之外,托马斯不再存在,当控件离开块时,对象和引用都被破坏。所以你不能在外面使用它们!

找另一个编写程序的逻辑。