使用child作为函数参数而不是parent

时间:2015-02-22 08:51:33

标签: c++

这里有愚蠢的问题,但由于我缺乏术语经验,我似乎无法找到明确的答案。  说我有一个班级

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
{
   ...
};

是否可以使用Char1Char2对象作为function(Char object)的参数,因为它们都会继承函数将使用的值?

感谢并抱歉这个愚蠢的问题

3 个答案:

答案 0 :(得分:1)

是。但你应该通过指针或引用传递。

所以你应该像这样定义Char

class Char{
    public:
        friend void function(Char &c); // or const Char &     

    protected:
        float x, y;
};

function是这样的:

void function(Char &c){}

(你可能还想做)

这样每次调用函数时都不会复制2个浮点数

您可以传递CharChar

的任何派生类

答案 1 :(得分:1)

您的函数正在按值传递参数,因此Char1Char部分复制(sliced)到堆栈Char1。如果要处理原始void function(Char &c) { // ... } 对象,请声明通过引用传递:

{{1}}

答案 2 :(得分:0)

我同意@ lubo-antonov这段代码没有正确的语法,但是如果我理解正确的话,“Char1”和“Char2”应该是继承自“Char”类的类,那么是的,你可以创建一个函数,例如function foo(Char obj),它将接收类型为“Char1”或“Char2”的对象作为参数。