使用子函数参数而不是父函数参数

Using child as a function parameter instead of parent

本文关键字:参数 函数 子函数      更新时间:2023-10-16

这是一个愚蠢的问题,但由于缺乏术语经验,我似乎找不到明确的答案。假设我有一个班级

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)的参数,因为它们都继承了函数将使用的值?

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

函数将按值传递一个参数,因此Char1将作为Char部分复制(切片)到堆栈中。如果要处理原始Char1对象,请声明通过引用传递:

void function(Char &c) {
    // ...
}

是。但您确实应该通过指针或引用进行传递。

所以你应该这样定义Char

class Char{
    public:
        friend void function(Char &c); // or const Char &     
    protected:
        float x, y;
};

function类似:

void function(Char &c){}

(你可能无论如何都想这么做)

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

并且您可以传入CharChar 的任何派生类

我同意@lubo antonov的观点,即这段代码的语法不正确,但如果我正确理解"Char1"answers"Char2"是从一个名为"Char"的类继承的类,那么是的,你可以创建一个函数,例如function foo(Char obj),它将接收一个类型为"Char1"或"Char2"的对象作为参数。