0

目前正在构建这种对象层次结构并能够使基类中的日志记录更加清晰,我决定使用某种变量或函数来返回类的类型。

例如:

class fruit {
   string _type;

   fruit() {
       _type = "base"; // or i dont have to set it. however, it wont be inforced
   }

   virtual const char* type() const { return "base"; } // or just = 0 to inforce it

   void function() {
       log(this->type(), " tastes good");
       log(this->_type, "tastes good");
   }
}

class apple : public fruit {

   apple() {
       _type = "apple";
   }

   const char* type() const { return "apple"; }
}

如您所见,有两种方法,我个人认为返回值版本更清晰,因为很明显它需要实现。

然而,我的问题是什么方法是最好的?每次我记录一些东西时调用一个函数会慢很多吗?只是假设它会被优化,但我可能是错的。

4

1 回答 1

1

首先,如果您需要知道程序中类的类型,那么您的设计就有问题。通常,您不希望您的程序依赖于具体的实现,而是依赖于接口

无论如何,该函数应该是一个纯虚函数,因此每个派生类都必须实现它,否则如果有人没有为其派生类实现它,那么您最终会为派生类获得错误的类型。

分配一个字符串和返回一个字符串文字都很好。
字符串文字具有静态存储持续时间,因此它将在整个程序期间有效,而且您适当地拥有const char返回类型,以便用户不会修改返回的文字并最终导致Undefined Behavior
返回成员也很好,尽管它只是为您的班级增加了额外成员的一些开销,并且您不太担心这个额外的成员。

于 2012-04-11T03:42:27.757 回答