面向对象编程<继承覆盖>之——C++

本文探讨了C++面向对象编程中继承和虚方法的使用,通过实例展示了如何在子类中覆盖和调用父类的虚方法,以及在不同场景下输出预期结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值