c/c++ 基金会(七) 功能覆盖,虚函数,纯虚函数控制
1.功能覆盖
ClassA , ClassB ,其中ClassB继承ClassA
类的定义如下面的:
#ifndef _CLASSA_H
#define _CLASSA_H
#include <iostream>
using namespace std;
class ClassA
{
	public:
		ClassA(void);
		~ClassA(void);
		void method();
};
#endif#include "stdafx.h"
#include "ClassA.h"
ClassA::ClassA(void)
{
}
ClassA::~ClassA(void)
{
}
void ClassA::method(void)
{
	cout<<"I am from class ClassA: methodA"<<endl;
}
#ifndef _CLASS_B
#define _CLASS_B
#include "ClassA.h"
class ClassB:public ClassA
{
public:
	ClassB(void);
	~ClassB(void);
	void method();
};
#endif
#include "stdafx.h"
#include "ClassB.h"
ClassB::ClassB(void)
{
}
ClassB::~ClassB(void)
{
}
void ClassB::method()
{
	cout<<"I am from class ClassB: methodA"<<endl;
}2.虚函数覆盖
VirtualClassA , VirtualClassB ,当中VirtualClassB继承VirtualClassA
类定义例如以下:
#ifndef _VIRTUAL_CLASS_A
#define _VIRTUAL_CLASS_A
#include <iostream>
using namespace std;
class VirtualClassA
{
public:
	VirtualClassA(void);
	~VirtualClassA(void);
	virtual void method();
};
#endif#include "stdafx.h"
#include "VirtualClassA.h"
VirtualClassA::VirtualClassA(void)
{
}
VirtualClassA::~VirtualClassA(void)
{
}
void VirtualClassA::method()
{
	cout<<"I am from class VirtualClassA: method"<<endl;
}
#ifndef _VIRTUAL_CLASS_B
#define _VIRTUAL_CLASS_B
#include "VirtualClassA.h"
class VirtualClassB:public VirtualClassA
{
public:
	VirtualClassB(void);
	~VirtualClassB(void);
	 virtual void method( );
};
#endif
#include "stdafx.h"
#include "VirtualClassB.h"
VirtualClassB::VirtualClassB(void)
{
}
VirtualClassB::~VirtualClassB(void)
{
}
void  VirtualClassB::method()
{
	cout<<"I am from class VirtualClassB: method"<<endl;
}3.纯虚函数覆盖
PureVirtualClassA , PureVirtualClassB ,当中PureVirtualClassB继承PureVirtualClassA
类定义例如以下:
#ifndef _PURE_VIRTUAL_CLASS_A
#define _PURE_VIRTUAL_CLASS_A
#include <iostream>
using namespace std;
class PureVirtualClassA
{
public:
	PureVirtualClassA(void);
	~PureVirtualClassA(void);
	virtual void method() =0;
	/*
		通常。不实现抽象基类的纯虚函数;
		当然,也能够给纯虚函数提供实现;
	*/
};
#endif
#include "stdafx.h"
#include "PureVirtualClassA.h"
PureVirtualClassA::PureVirtualClassA(void)
{
}
PureVirtualClassA::~PureVirtualClassA(void)
{
}
#ifndef _PURE_VIRTUAL_CLASS_B
#define _PURE_VIRTUAL_CLASS_B
#include "purevirtualclassa.h"
class PureVirtualClassB :public PureVirtualClassA
{
public:
	PureVirtualClassB(void);
	~PureVirtualClassB(void);
	 virtual void method();
};
#endif
#include "stdafx.h"
#include "PureVirtualClassB.h"
PureVirtualClassB::PureVirtualClassB(void)
{
}
PureVirtualClassB::~PureVirtualClassB(void)
{
}
void PureVirtualClassB::method(void)
{
	cout<<"I am from class PureVirtualClassB: method"<<endl;
}測试代码例如以下:
// virtualMethodTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "ClassA.h"
#include "ClassB.h"
#include "VirtualClassA.h"
#include "VirtualClassB.h"
#include "PureVirtualClassA.h"
#include "PureVirtualClassB.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	cout<<"--------覆盖---------"<<endl;
	ClassA *pClassA=new ClassA();
	pClassA->method();
	delete(pClassA);
	ClassB *pClassB=new ClassB();
	pClassB->method();
	//	pClassB->ClassA::method();--能够隐式调用父类的方法
	// (*pClassB).ClassA::method();
	delete(pClassB);
	ClassA *pClassB2=new ClassB();
	pClassB2->method();
	delete(pClassB2);
	cout<<"-------多态----------"<<endl;
	VirtualClassA *pVirtualClassA=new VirtualClassA();
	pVirtualClassA->method();
	delete(pVirtualClassA);
	VirtualClassB *pVirtualClassB=new VirtualClassB();
	pVirtualClassB->method();
	delete(pVirtualClassB);
	VirtualClassA *pVirtualClassB2=new VirtualClassB();
	pVirtualClassB2->method();
	delete(pVirtualClassB2);
	cout<<"-------纯虚函数----------"<<endl;
	//PureVirtualClassA *pPureVirtualClassA=new PureVirtualClassA();
	//pPureVirtualClassA->method();
	//delete(pPureVirtualClassA);
	PureVirtualClassB *pPureVirtualClassB=new PureVirtualClassB();
	pPureVirtualClassB->method();
	delete(pPureVirtualClassB);
	PureVirtualClassA *pPureVirtualClassB2=new PureVirtualClassB();
	pPureVirtualClassB2->method();
	delete(pPureVirtualClassB2);
	return 0;
}
打印结果例如以下:
函数覆盖不能实现多态。
虚函数和纯虚函数能够实现多态。
含有纯虚函数的类不能实例化。
代码地址:http://download.csdn.net/detail/zz7zz7zz/8096231
版权声明:本文博客原创文章,博客,未经同意,不得转载。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号