注意:主函数在调用的时候必须生成基类的指针,必须生成虚函数,并且子类要重写基类的函数,只要基类的函数是虚函数,子类的函数不需要加关键词virtual,构造函数不能成为虚函数,析构函数可以成为虚函数
#include
using namespace std;
class A
{
private:
int x;
public:
virtual void set()
{
cout<<"A类的虚成员函数被调用"<<"\n";
}
};
class B:public A
{
private:
int x;
public:
virtual void set()
{
cout<<"B类的虚成员函数被调用"<<"\n";
}
};
class C:public A
{
private:
int x;
public:
virtual void set()
{
cout<<"C类的成员函数被调用"<<"\n";
}
};
int main(int argc, const char * argv[])
{
// insert code here...
A *a;
a= new A;
a->set();
a = new B;
a->set();
a=new C;
a->set();
std::cout << "Hello, World!\n";
return 0;
}
#include <iostream>
using namespace std;
class A
{
private:
char * x;
public:
A()
{
static int i=0;
i++;
cout<<"A类的构造函数被调用第"<<i<<"次"<<"\n";
x=new char[5];
}
virtual ~A()
{
static int j=0;
j++;
cout<<"A类的析构函数被调用第"<<j<<"次"<<"\n";
delete []x;
}
};
class B:public A
{
private:
char * q;
public:
B()
{
static int i=0;
i++;
cout<<"B类的构造函数被调用第"<<i<<"次"<<"\n";
q=new char[500];
}
virtual ~B()
{
static int j=0;
j++;
cout<<"B类的析构函数被调用第"<<j<<"次"<<"\n";
delete [] q;
}
};
void f()
{
A *a;
a=new B();
delete a;
}
int main(int argc, const char * argv[])
{
// insert code here...
for(int i=0;i<3;i++)
{
f();
}
std::cout << "Hello, World!\n";
return 0;
}