我想了解虚拟函数的用途。
让我们分析一下成员函数是非虚函数的代码:
示例1:
struct A
{
void foo1() { cout << "foo 1 from A \n"; }
};
struct B : A
{
void foo1() { cout << "foo 1 from B \n"; }
};
int main()
{
A *a = new B;
a->foo1(); // will print "foo 1 from A \n" because A::foo1
在一些书中,声明或继承虚函数的类被称为多态类。
类B没有任何虚函数,但通过了多个is-a测试。
类C有一个虚函数,但没有继承。
class A {};
class B : public A {};
class C
{
public:
virtual void f () {}
};
B类或C类是多态的吗?
众所周知,早期绑定是声明特定数据类型的对象的概念,它不能包含任何其他类型的对象。而后期绑定是声明泛型类型的对象的概念,它可以保存任何其他类型的实例。考虑下面的例子:
public abstract class Animal
{
public virtual string Name { get { return "Animal"; } }
}
public class Dog : Animal
{
public override string Name { get { return "Dog"; } }
}
public class C