这里有愚蠢的问题,但由于我缺乏术语经验,我似乎无法找到明确的答案。 说我有一个班级
Class Char
{
friend void function(Char object);
protected:
float x, y;
};
void function(Char object){
// access object.x and object.y
}
该课程有几个子课程:
Class Char1 : public Char
{
...
};
Class Char2 : public Char
{
...
};
是否可以使用Char1
或Char2
对象作为function(Char object)
的参数,因为它们都会继承函数将使用的值?
感谢并抱歉这个愚蠢的问题
答案 0 :(得分:1)
是。但你应该通过指针或引用传递。
所以你应该像这样定义Char
:
class Char{
public:
friend void function(Char &c); // or const Char &
protected:
float x, y;
};
和function
是这样的:
void function(Char &c){}
(你可能还想做)
这样每次调用函数时都不会复制2个浮点数
您可以传递Char
或Char
答案 1 :(得分:1)
您的函数正在按值传递参数,因此Char1
将Char
部分复制(sliced)到堆栈Char1
。如果要处理原始void function(Char &c) {
// ...
}
对象,请声明通过引用传递:
{{1}}
答案 2 :(得分:0)
我同意@ lubo-antonov这段代码没有正确的语法,但是如果我理解正确的话,“Char1”和“Char2”应该是继承自“Char”类的类,那么是的,你可以创建一个函数,例如function foo(Char obj)
,它将接收类型为“Char1”或“Char2”的对象作为参数。