virtual修饰的函数进行重写,类似于Java中的接口。学习代码
#include<iostream>
using namespace std;
class A
{
public:
A(){
}
virtual ~A(){
cout << "A discontruct" << endl;
}
virtual string OnPaint() = 0; // 定义接口
};
class B : public A
{
public:
virtual string OnPaint()
{
cout<< "B" << endl;
return "B";
}
virtual ~B(){
cout << "B discontruct" << endl;
}
};
class C : public A
{
public:
virtual string OnPaint()
{
cout<< "C" << endl;
return "C";
}
virtual ~C(){
cout << "C discontruct" << endl;
}
};
int main()
{
A* p = new B();
p->OnPaint(); // B
delete p;
p = new C();
p->OnPaint(); // C
delete p;
return 0;
}运行结果

学习代码
// 交换两个值,但是不清楚是int 还是 double,如果不使用模板,则要写两份代码
// 使用函数模板,将类型作为参数传递
template<class T>
class Swa(T a,T b)
{
T temp;
temp = a;
a = b;
b = temp;
};#include<iostream>
using namespace std;
class A
{
public:
A(){
}
~A(){
}
void OnPaint(){
cout << "A" << endl;
}
};
class B : public A
{
public:
string OnPaint()
{
cout<< "B" << endl;
return "B";
}
};
class C : public A
{
public:
string OnPaint()
{
cout<< "C" << endl;
return "C";
}
};
int main()
{
// 静态多态的函数返回值等等都可以改变
A* p = new B();
p->OnPaint(); // A
delete p;
p = new C();
p->OnPaint(); // A
delete p;
return 0;
}运行结果
