#pragma once
class base
{
virtual int get();
};
int base::get() {};
#include<iostream>
using namespace std;
class A{
public:
virtual void Print()
{
cout << "A::Print" << endl;
}
};
class B :public A {
public:
virtual void Print() {
cout << "B::Print" << endl;
}
};
class D :public A {
public:
virtual void Print() {
cout << "D::Print" << endl;
}
};
class E :public B
{
public:
virtual void Print() {
cout << "E::Print" << endl;
}
};
int main() {
A a;
B b;
E e;
D d;
A* pa = &a;
B* pb = &b;
D* pd = &d;
E* pe = &e;
pa->Print();
pa = pb;
pa->Print();
pa = pd;
pa->Print();
pa = pe;
pa->Print();
}
class CBase
{
public:
virtual void SomeVirtualFunction() {}
};
class CDerived :public CBase {
public:
virtual void SomeVirtualFunction() {}
};
int main() {
CDerived ODerived;
CBase* p = &ODerived;
p->SomeVirtualFunction();
return 0;
}
class CBase
{
public:
virtual void SomeVirtualFunction() {}
};
class CDerived :public CBase {
public:
virtual void SomeVirtualFunction() {}
};
int main() {
CBase& r = ODerived;
r.SomeVirtualFunction();
return 0;
}
- 虚析构函数:如果基类的析构函数不是虚函数,则deleted一个指向派生类对象的基类指针将产生未定义行为。我们将可能会被继承的父类的析构函数设置为虚函数,可以保证当我们new一个子类,然后使用基类指针指向该子类对象,释放基类指针时可以释放掉子类的空间,防止内存泄漏。C++默认的析构函数不是虚函数是因为虚函数需要额外的虚函数表和虚表指针,占用额外的内存。而对于不会被继承的类来说,其析构函数如果是虚函数,就会浪费内存。因此C++默认的析构函数不是虚函数,而是只有当需要当作父类时,设置为虚函数。