C++ 当只有派生类知道成员变量的大小时,如何在基类函数中使用成员变量
我想在使用其派生类成员的基类中实现一个函数。因此,对于每个DerivedClass,我都会有一个不同值的成员。 这里有一个例子。C++ 当只有派生类知道成员变量的大小时,如何在基类函数中使用成员变量,c++,inheritance,polymorphism,C++,Inheritance,Polymorphism,我想在使用其派生类成员的基类中实现一个函数。因此,对于每个DerivedClass,我都会有一个不同值的成员。 这里有一个例子。BaseClass具有成员函数Foo(),该函数使用变量arrStr。然而,这个以NUL结尾的字符数组的内容只能在派生类中找到。 在不知道变量大小的情况下,如何使BaseClass知道变量arrStr?这可能吗 class BaseClass { public: BaseClass(); ~BaseClass();
BaseClass
具有成员函数Foo()
,该函数使用变量arrStr
。然而,这个以NUL结尾的字符数组的内容只能在派生类中找到。
在不知道变量大小的情况下,如何使BaseClass
知道变量arrStr
?这可能吗
class BaseClass
{
public:
BaseClass();
~BaseClass();
protected:
void Foo()
{
prtinf("%s\n", arrStr);
};
};
class DerivedClass : public BaseClass
{
public:
DerivedClass();
~DerivedClass();
protected:
char arrStr[] = "FooString!";
};
在派生类中实现的基类中添加(纯)虚拟访问函数
#include <iostream>
#include <string>
class BaseClass
{
protected:
void Foo()
{
std::cout << GetString() << std::endl;
}
private:
virtual std::string GetString() const = 0;
};
class DerivedClass : public BaseClass
{
private:
virtual std::string GetString() const override
{
return "FooString!";
}
};
#包括
#包括
类基类
{
受保护的:
void Foo()
{
标准::cout
我如何让基类“知道”变量arrStr而不知道其大小?这可能吗
class BaseClass
{
public:
BaseClass();
~BaseClass();
protected:
void Foo()
{
prtinf("%s\n", arrStr);
};
};
class DerivedClass : public BaseClass
{
public:
DerivedClass();
~DerivedClass();
protected:
char arrStr[] = "FooString!";
};
调用Foo时将其作为参数插入:
class BaseClass
{
public:
virtual void Process() = 0;
protected:
void Foo(char* str) // <-- value inserted here as parameter
{
prtinf("%s\n", arrStr);
}
};
class DerivedClass : public BaseClass
{
public:
void Process() override
{
Foo(arrStr); // call in derived class, with derived value
}
protected:
char arrStr[] = "FooString!";
};
基类了解派生类的详细信息是一个设计问题。但是,您可以在基类中声明和使用虚拟函数,并在派生类中实现它们。虽然没有足够的信息来确定您真正要解决的问题。谢谢!但是,对于派生类,我希望消除我的开销因为每个派生类都有相同的Foo
函数实现。MakeFoo()
调用(a)私有虚拟函数,即在派生类中实现。为什么不在基类中存储一个指针或引用?您测量的开销是多少?@UlrichEckhardt,当然,谢谢。这就是我要找的。我没有测量开销,可能编译器无论如何都会对此进行优化。我只是不想要s的三个实现ame函数。GetString()
可以而且可能应该是私有的。但无论如何+1……它也可能是const
。同意这两个注释。已编辑。