C++虚函数

虚函数(关键字:virtual)
  关于虚函数,今天自己整理了一下,整理不到位的地方,希望大家指点一下。
  个人觉得,首先需要明确两个概念,就是重写和重载。重载就是在一个类里面,我们可以把函数的名字取的一样,但是参数表要不同的方法(返回值类型可以不一样)。重写就是当一个子类继承父类,子类和父类中的方法名称,参数的个数、参数的类型以及返回值类型都一致时,就说明子类重写了父类中的方法。一般需要重写的函数,函数声明中都有virtual关键字。如果虚函数中有代码的并明确允许子类去重写,但是子类可以不重写,直接拿来用。

  C++中有虚函数的概念,用virtual关键字来表示,每个类都会有一个虚函数表,该虚函数表首先会从父类中继承得到父类的虚函数表, 如果子类中重写了父类的虚函数(不管重写后的函数是否为虚函数),要调用哪个虚函数,是根据当前实际的对象来判断的(不管指针所属类型是否为当前类,有可能是父类型),指针当前指向的是哪种类型的对象,就调用相应类型中类定义的虚函数。每个类只有一张虚拟函数表,所有的对象共用这张表。

参考代码:

父类:class __declspec(dllexport) DCDBSQL
虚函数声明:virtual const char* GetValue(TINT32 pos) throw(DCDBException) = 0;
子类:继承父类
class DLLEXPORT DCRDBSQL : public DCDBSQL

重写父类的虚函数

const char* DCRDBDQL::GetValue(TINT32 pos) throw()
{
	char* ptr = NULL;
	if(!((pos > GetResultColsNum()) || (pos <= 0)))
	{
		if (DATA_TYPE_CHAR == m_resultIdx[pos-1].type)
		{
			ptr = m_resultStringValue[m_resultIdx[pos-1].pos];
		}
		else
		{
			ptr = m_resultBlobValue[m_resultIdx[pos-1].pos];
		}
	}
	
	return ptr;
}

参考链接:

http://blog.csdn.net/rfb0204421/article/details/3548929

http://blog.csdn.net/zzsyzxzm/article/details/7489732


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值