是否可以将方法参数的类型定义为类或任何派生类
Is it possible to define the type of a method argument to be a class or any derivate class?
假设我们有:
class Base {...}
class A : public Base {...}
class B : public Base {...}
是否可以设置为泛型方法的参数类型:
myMethod([typei'mlookingfor] c) {}
以便我可以在不重载方法的情况下将Base、A和B传递给myMethod()
?并使其与引用和指针一起工作?
如果对基类的指针或引用适用,只需使用:
void myMethod(Base& c) {}
A a;
B b;
myMethod(a); //OK
myMethod(b); //OK
请注意,您必须使用引用或指针来防止对象切片。如果方法是myMethod(Base c)
,则会丢失派生对象的类型信息。
如果没有,您可以使用模板
template<typename T>
void myMethod(T& c)
{
}
A a;
B b;
myMethod(a);
myMethod(b);
Q:是否可以将方法参数的类型定义为类或任何派生类?
A: 当然。为什么不呢?
如果您想要一个可以是任意类型的"泛型"参数,只需使用模板即可。
否则,如果您想要"类或任何子类",只需使用基类。
有用的报价:
http://wiki.answers.com/Q/What_are_the_concepts_of_object_oriented_programming
多态性 允许程序员仅处理派生类成员就像他们的父类成员一样。更确切地说面向对象编程是指对象属于不同的数据类型以响应相同方法的方法调用名称,每一个都根据适当的特定类型的行为。
我相信,这正是你想要的:)
有两种方法可以做到这一点。第一是动态多态性。仅适用于指针和引用。运行时开销较小:
void myMethod(Base& x) { ...}
第二种-静态多模式:
template<class T>
std::enable_if<is_base_of<Base,T>::value>
myMethod(base x) {...}
相关文章:
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- 使(虚拟)函数在大多数派生类中无法访问中间基类中可访问,定义良好?
- 为什么为派生类定义复制构造函数需要定义基类的默认构造函数?
- 有没有办法将C++结构/类中的所有定义都纳入范围而不从中派生?
- 如何使虚函数接受仅在派生类中定义的数据类型?
- 基类可以声明虚拟方法但不定义它吗?仍然在派生类中定义
- 错误:基类在从基类父派生类 Son 时未定义
- 自定义派生的 std::exception 类的 'what' 函数返回神秘的废话
- 如何在基类中定义静态接口,并确保该接口必须在派生类中实现
- 即使基类和派生类只使用基元数据类型,我是否需要定义虚拟析构函数
- 如何在C 中创建Logic_error的自定义派生类
- 如何在C 中定义派生类
- 如何在升压单位中正确定义派生单位
- 尝试定义派生自抽象类的类类型的对象时出错
- 重新定义派生类中的基类方法
- 如何定义派生模板类的函数
- 如何通过定义派生类的构造函数来实例化两个基类的私有数据成员
- 定义派生类时,为什么基类被标记为"public?"
- 重新定义派生类的继承内部函数以对基类产生影响
- 如何定义派生类的非成员构造函数(在类头文件中)