Let say I am designing an interface, to return the name of the child class. Note that, for different instance of a child class, their name shall remain the same.
For speed and memory efficient, I would say 3rd method signature is probably the best (based on some comment from char* vs std::string in c++)
virtual const std::string& name2() const = 0;
I was wondering is there any better alternative?
#include <cstdio>
#include <string>
class baby_interface {
public:
virtual const char* name0() const = 0;
virtual std::string name1() const = 0;
virtual const std::string& name2() const = 0;
};
class baby : public baby_interface {
public:
virtual const char* name0() const
{
return "My Baby";
}
virtual std::string name1() const
{
return "My Baby";
}
virtual const std::string& name2() const
{
return std::string("My Baby");
}
};
int main()
{
baby b;
// Refer to same char array address.
printf("%x\n", b.name0());
printf("%x\n\n", b.name0());
// Refer to different char array address.
printf("%x\n", b.name1().c_str());
printf("%x\n\n", b.name1().c_str());
// Refer to same char array address.
printf("%x\n", b.name2().c_str());
printf("%x\n\n", b.name2().c_str());
getchar();
}