在这里,我们将看到不同类型的多态性。类型是-
特别指定
包容性
强迫
Ad-Hoc多态称为超载。这允许具有相同名称的函数针对不同类型以不同的方式起作用。函数和运算符都可以重载。某些语言不支持运算符重载,但是函数重载是常见的。
#include<iostream> using namespace std; int add(int a, int b) { return a + b; } string add(string a, string b) { return a + b; //concatenate } int main() { cout << "Addition of numbers: " << add(2, 7) << endl; cout << "Addition of Strings: " << add("hello", "World") << endl; }
输出结果
Addition of numbers: 9 Addition of Strings: helloWorld
包含多态性称为子类型化。这允许使用基类指针和引用来指向派生类。这是运行时多态。在执行之前,我们不知道实际对象的类型。我们需要C ++中的虚函数来实现这种包含多态性。
#include<iostream> using namespace std; class Base { public: virtual void print() { cout << "这是基类。" << endl; } }; class Derived : public Base { public: void print() { cout << "这是派生类。" << endl; } }; int main() { Base *ob1; Base base_obj; Derived derived_obj; ob1 = &base_obj; //object of base class ob1->print(); ob1 = &derived_obj; //same pointer to point derived object ob1->print(); }
输出结果
这是基类。 这是派生类。
强制转换多态性称为强制转换。当对象或图元被转换为其他类型时,会发生这种类型的多态。有两种类型的铸件。隐式转换是使用编译器本身完成的,显式转换是使用const_cast,dynamic_cast等完成的。
#include<iostream> using namespace std; class Integer { int val; public: Integer(int x) : val(x) { } operator int() const { return val; } }; void display(int x) { cout << "Value is: " << x << endl; } int main() { Integer x = 50; display(100); display(x); }
输出结果
Value is: 100 Value is: 50
参数多态性称为早期绑定。这种多态性允许对不同类型使用相同的代码。我们可以使用模板来获得它。
#include<iostream> using namespace std; template <class T> T maximum(T a, T b) { if(a > b) { return a; } else { return b; } } int main() { cout << "Max of (156, 78): " << maximum(156, 78) << endl; cout << "Max of (A, X): " << maximum('A', 'X') << endl; }
输出结果
Max of (156, 78): 156 Max of (A, X): X
“有四种多态性:参数、包含、强制和重载”。 在注释中,它指用具有不同参数的方法重载,也指重载运算符,例如在ints和floats意义上的+。 Wikipedia还指出,“在许多语言中,使用函数重载支持ad hoc多态性。”
问题内容: 我想了解参数多态性(例如Java / Scala / C ++语言中的通用类/函数的多态性)与Haskell类型系统中的“即席”多态性之间的主要区别。我熟悉第一种语言,但是我从未与Haskell合作。 更确切地说: 例如Java中的类型推断算法与Haskell中的类型推断有何不同? 请给我举一个例子,这种情况可以用Java / Scala编写但不能用Haskell编写(根据这些平台的模
是否可以在 Swagger 中定义多种类型的输入参数? 示例:我有一个使用URL < code > http://localhost/tasks/{ taskId } 处理资源的API。但是每个任务都包含整数id和字符串uuid。我希望允许用户通过id或uuid来寻址资源,这样< code > http://localhost/tasks/123 和< code > http://localhos
我试图在c#中创建一个参数多态性函数: 我想让T成为类型变量。但是我得到了一个关于类的错误,没有找到T。 有人知道如何解决这个问题吗? 谢谢。
将类型包含到模型中意味着 EF 将获得该类型的元数据,并且将尝试从数据库读取该类型的实例或将该类型的实例写入到数据库。 惯例 按照惯例,在上下文中通过 DbSet 属性暴露的类型都将包含在模型中。另外,在 OnModelCreating 方法中提及的类型也会被包含在模型中。最后,通过递归扫描已包含(在模型中的)类型的导航属性所找到的任何类型都将包含在模型中。 比如,以下代码列出的三个类型都已包含在
问题内容: 我有以下两节课: 和: 当我运行测试时,一切都是笨拙的。如果我将类型参数化更改为: 编译器抱怨,报告: 错误:类型不兼容的整数不能转换为T number = new Integer(11); 其中T是类型变量T扩展了在方法getSomeValue(boolean)中声明的Object 它同样对Double有所抱怨。为什么? 编辑:我犯了一个错误。这实际上是有效的代码。 现在我明白了@S