C++ 对象标识符、返回值或变量?
目前正在构建这个对象层次结构,为了能够在基类中更清楚地记录日志,我决定使用某种类型的变量或函数来返回类的类型 例如:C++ 对象标识符、返回值或变量?,c++,inheritance,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"; } // o
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"; }
}
正如您所看到的,有两种方法,我个人认为返回值版本更干净,因为它显然需要实现
然而,我的问题是什么方法是最好的?每次我记录一些东西时调用函数会慢很多吗?只是假设它会被优化,但我可能错了 首先,如果您需要知道程序中的类的类型,那么您的设计中就存在一些错误。通常,您不希望您的程序依赖于具体的接口,而是依赖于接口 无论如何,该函数应该是一个纯虚拟函数,因此每个派生类都必须实现它,否则,如果有人没有为其派生类实现它,您将最终得到错误的派生类类型 分配字符串和返回字符串文字都很好。
字符串文字具有静态存储持续时间,因此它在整个程序持续时间内都有效,您还可以适当地使用
const char
返回类型,以便用户不会修改返回的文字,并最终导致未定义的行为返回一个成员也可以,不过这只会给你的类增加额外成员的开销&你不必太担心这个额外成员。我使用它的唯一目的是记录日志,以明确我处理的是哪个dervied类。我需要一个字符来描述这个类。千叶:在这种情况下,我觉得没什么问题。请注意让函数纯虚拟的要点。不太确定“你不想让你的程序依赖于具体的imlpements,而是依赖于接口”来解释什么。千叶:这是设计原则之一,你可能想查找是的,我知道这一点,我不依赖代码中的实现。我更多的是问这和我的问题有什么关系。