symbian的C++摸索二
通过《symbian的C++摸索一》我知道了继承要加上public,现在关心如何让子类必须要实现一个方法呢?symbian似乎并不能用abstract关键字。
#bb0000 identifier 'abstract'
我留意到M类的方法全是virtual,同时留意到每个方法后面都是“=0”,估计这就是abstract的意思。修改《symbian的C++摸索一》里的Vehicle.h
#include <e32base.h>
#include <e32std.h>
#include <e32cons.h> // Console
class CVehicle
{
public:
CVehicle();
virtual ~CVehicle();
virtual void Run(CConsoleBase* aConsole)=0;
};
#include <e32std.h>
#include <e32cons.h> // Console
class CVehicle
{
public:
CVehicle();
virtual ~CVehicle();
virtual void Run(CConsoleBase* aConsole)=0;
};
子类
#include "Vehicle.h"
class CAutocycle: public CVehicle
{
public:
CAutocycle();
virtual ~CAutocycle();
void Run(CConsoleBase* aConsole);
void Jump(CConsoleBase * aConsole);
};
class CAutocycle: public CVehicle
{
public:
CAutocycle();
virtual ~CAutocycle();
void Run(CConsoleBase* aConsole);
void Jump(CConsoleBase * aConsole);
};
Autocycle.cpp#include "Autocycle.h"
CAutocycle::CAutocycle(){}
CAutocycle::~CAutocycle(){
}
void CAutocycle::Jump(CConsoleBase * aConsole)
{
aConsole->Write(_L("Autocycle is jumping..\n"));
}
void CAutocycle::Run(CConsoleBase * aConsole)
{
aConsole->Write(_L("Autocycle is runing..\n"));
CAutocycle::CAutocycle(){}
CAutocycle::~CAutocycle(){
}
void CAutocycle::Jump(CConsoleBase * aConsole)
{
aConsole->Write(_L("Autocycle is jumping..\n"));
}
void CAutocycle::Run(CConsoleBase * aConsole)
{
aConsole->Write(_L("Autocycle is runing..\n"));
测试以上代码
LOCAL_C void MainL()
{
console->Write(_L("Hello, world!\n"));
CVehicle* veh;
CAutocycle cycle;//如果没有实现Run方法,编译时报错
veh = &cycle;
veh->Run(console);
console->Getch();
}
{
console->Write(_L("Hello, world!\n"));
CVehicle* veh;
CAutocycle cycle;//如果没有实现Run方法,编译时报错
veh = &cycle;
veh->Run(console);
console->Getch();
}
如果CAutocycle如果没有实现Run方法,编译时报错:
illegal use of abstract class ('CVehicle::Run(CConsoleBase *)')


浙公网安备 33010602011771号