c++ - 对象标识符、返回值或变量?

标签 c++ inheritance

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

例如:

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"; }
}

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

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

最佳答案

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

无论如何,这个函数应该是一个纯虚函数,这样每个派生类都必须实现它,否则如果有人没有为他们的派生类实现它,你最终会得到错误的派生类类型。

分配一个字符串并返回一个字符串字面值都可以。
字符串文字具有静态存储持续时间,因此它将在整个程序期间有效,此外,您适本地具有 const char 返回类型,以便用户不会修改返回的文字并最终导致 < strong>未定义的行为。
返回一个成员也很好,尽管它只是给你的类(class)增加了一些额外成员的开销,而且你不太担心这个额外的成员。

关于c++ - 对象标识符、返回值或变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10099465/

相关文章:

javascript - 子类化 JavaScript 数组 - 构造函数参数未传递给数组

java - 从其内部类访问类对象

c++ - 在 C++ 中创建队列 - 什么是 malloc 错误?

c++ - 在 C++ 2017 中将 const 转换为非常量指针并对其进行修改时,编译器将这两个值存储在哪里?

c++ - 如何获得 iPhone 6 或 6 Plus 的确切屏幕尺寸

c++ - G++ 编译器 : option -s is obsolete and being ignored C++

CSS继承问题

java - java中的初始化顺序,继承和重写字段

javascript - 在 HOC 中访问 React 组件的功能

C++ 在函数中生成随机数