目前正在构建这个对象层次结构,并且能够使基类中的日志记录更加清晰,我决定使用某种变量或函数来返回类的类型。
例如:
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"; }
}
正如您所看到的,有两种方法,我个人认为返回值版本更清晰,因为很明显它需要实现。
然而我的问题是哪种方法最好?每次我记录某些东西时调用函数会慢得多吗?只是假设它会被优化但我可能是错的。
答案 0 :(得分:1)
首先,如果您需要知道程序中的类类型,那么您的设计就会出现问题。通常,您不希望您的程序依赖于具体的imlpementation ,而是依赖于接口。
无论如何,该函数应该是一个纯虚函数,以便每个派生类都必须实现它,否则如果有人没有为它们的派生类实现它,你最终会得到派生类的错误类型。
分配字符串并返回字符串文字都很好
字符串文字具有静态存储持续时间,因此它在程序的整个持续时间内都是有效的。您还适当地具有const char
返回类型,以便用户不会修改返回的文字并最终导致未定义的行为即可。
返回一个成员也很好,虽然它只是增加了一个额外成员的一些开销给你的班级&你不太担心这个额外的成员。