我有一个基类和几个非常类似的基础类。他们看起来有点像:
class Base
{
protected:
data stuff;
size_t length;
public:
Base();
~Base();
virtual void print()
{
std::cout << "Base" << std::endl;
}
// Some more virtual functions
};
class Der1: public Base
{
public:
void print()
{
std::cout << "Der1" << std::endl;
Base::print();
}
};
class Der2: public Base
{
public:
void print()
{
std::cout << "Der2" << std::endl;
Base::print();
}
};
这个例子有点愚蠢,但我想说的是派生类并没有真正影响数据本身 - 只有一种方法在实际打印数据之前做了一些事情。
我遇到的问题是我有一些函数可以将Base类作为参数并对数据执行某些操作。问题是 - 我可以将派生类传递给那些函数,但是它们作为Base类传递 - 因此它们会丢失它们的重载print
,如果从这样的函数内部打印 - 它将不会打印任何{{1 }或"Der1"
字符串到标准输出。
修改:它们将作为"Der2"
所以我的问题是 - 什么是将派生类正确传递给这些函数的方法?
答案 0 :(得分:1)
看起来你的函数按值Base
类作为参数。如果你使用引用传递 - 所以function(Base& object)
而不是function(Base object)
- 什么都不会丢失。
答案 1 :(得分:0)
除了之前的回答,请参阅下面的示例:
#include <iostream>
class Base
{protected:
int stuff;
size_t length;
public:
Base(){};
~Base(){};
virtual void print()
{std::cout << "Base" << std::endl;}
// Some more virtual functions
};
class Der1: public Base
{public:
Der1(){};
~Der1(){};
void print()
{
std::cout << "Der1" << std::endl;
Base::print();
};
};
class Der2: public Base
{public:
void print()
{
std::cout << "Der2" << std::endl;
Base::print();
};
};
void function(Base& base)
{
base.print();
}
int main(void)
{
Der1 derived;
function(derived);
return 0;
}
执行: Der1 基