C++面向对象继承,虚方法,类似于指针.....
//Father.h
class Father
{
public:
Father();
virtual ~Father();
int getInt();
int setInt();
virtual int vsetInt();
};
//Son.h
class Son : public Father
{
public:
Son();
virtual ~Son();
int getInt();
int setInt();
virtual int vsetInt();
};
//Father.cpp
Father::Father()
{
}
Father::~Father()
{
}
int Father::getInt()
{
printf("Father: getInt()\n");
return 1;
}
int Father::setInt()
{
printf("Father: setInt()\n");
return 2;
}
int Father::vsetInt()
{
printf("Father: vsetInt()\n");
return 11;
}
//Son.cpp
Son::Son()
{
}
Son::~Son()
{
}
int Son::getInt()
{
printf("Son: getInt()\n");
return 3;
}
int Son::setInt()
{
printf("Son: setInt()\n");
return 4;
}
int Son::vsetInt()
{
printf("Son: vsetInt()\n");
return 5;
}
测试程序:
int main(int argc, char* argv[])
{
printf("Derived: Father* fa=new Son();-----------------------------------\n");
Father* fa=new Son();
printf("%d\n",fa->getInt());
printf("%d\n",fa->setInt());
printf("--------Virtual Method---------------------------\n");
printf("%d\n",fa->vsetInt());
//printf("%d\n",fa->Son::vsetInt()); //Son' : is not a member of 'Father'
printf("\n\n");
printf("Derived: Son* fa2=new Son();-----------------------------------\n");
Son* fa2=new Son();
printf("%d\n",fa2->getInt());
printf("%d\n",fa2->setInt());
printf("---------Virtual Method--------------------------\n");
printf("%d\n",fa2->vsetInt());
printf("%d\n",fa2->Father::vsetInt());
printf("\n\n");
printf("Derived: Son* fa3=new Father();-----------------------------------\n");
Son* fa3=(Son*)new Father();
printf("%d\n",fa3->getInt());
printf("%d\n",fa3->setInt());
printf("---------Virtual Method--------------------------\n");
printf("%d\n",fa3->vsetInt());
printf("%d\n",fa3->Father::vsetInt());
return 0;
}
输出结果:
Derived: Father* fa=new Son();-----------------------------------
Father: getInt()
1
Father: setInt()
2
--------Virtual Method---------------------------
Son: vsetInt()
5
Derived: Son* fa2=new Son();-----------------------------------
Son: getInt()
3
Son: setInt()
4
---------Virtual Method--------------------------
Son: vsetInt()
5
Father: vsetInt()
11
Derived: Son* fa3=new Father();-----------------------------------
Son: getInt()
3
Son: setInt()
4
---------Virtual Method--------------------------
Father: vsetInt()
11
Father: vsetInt()
11