使用子函数参数而不是父函数参数
Using child as a function parameter instead of parent
这是一个愚蠢的问题,但由于缺乏术语经验,我似乎找不到明确的答案。假设我有一个班级
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)
的参数,因为它们都继承了函数将使用的值?
感谢并抱歉提出这个愚蠢的问题
函数将按值传递一个参数,因此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个浮点
并且您可以传入Char
或Char
的任何派生类
我同意@lubo antonov的观点,即这段代码的语法不正确,但如果我正确理解"Char1"answers"Char2"是从一个名为"Char"的类继承的类,那么是的,你可以创建一个函数,例如function foo(Char obj)
,它将接收一个类型为"Char1"或"Char2"的对象作为参数。
相关文章:
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类