c++ 基类派生类 继承与虚函数
与java相比,c++的继承个人觉得有点复杂,复杂在构造函数上,java中派生类实现基类的构造函数直接super关键字,就可以实现,c++中则要通过实现构造函数,看下面的例子
特别说明的是:基类的希望派生类实现的函数一定要用virtual 标明为虚函数,虚函数是c++实现动态绑定的关键,基类的虚函数,基类一定要实现,不然则会编译不通过,派生类可以不实现虚函数而用基类的函数执行。
纯虚函数:
virtual void setRoomName()=0;
如果一个类的函数全部都是纯虚函数,则这个类不能有自己类的实现(包括引用和指针),只能通过派生类继承实现(这点和java的接口类似)
首先基类的实现:
基类Room的头文件代码
#pragma once
#include <string>
#include <iostream>
using std::string;
class Room
{
public:
Room(string roomName);
~Room();
private:
string name;
public:
virtual void setRoomName();
};
基类Room的源文件文件代码
#include "stdafx.h"
#include "Room.h"
Room::Room(string roomName) :name(roomName)
{
}
Room::~Room()
{
}
void Room::setRoomName(){
std::cout << "当前房间的名字是:"<<name << std::endl;
}
一下三个派生类
第一个派生类Boss的头文件
#pragma once
#include "Room.h"
class Boss :
public Room
{
public:
Boss(string roomName);
~Boss();
virtual void setRoomName() override;
};
第一个派生类Boss的源文件
#include "stdafx.h"
#include "Boss.h"
#include <iostream>
using std::cout;
using std::endl;
Boss::Boss(string roomName) :Room(roomName)
{
}
Boss::~Boss()
{
}
void Boss::setRoomName(){
cout << "当前房间的名字是:老板办公室"<<endl;
}
第二个派生类Office的头文件
#pragma once
#include "Room.h"
class oofice:public Room
{
public:
oofice(string roomName);
~oofice();
virtual void setRoomName() override;
};
第二个派生类Office的源文件
#include "stdafx.h"
#include "Office.h"
#include <iostream>
using std::cout;
using std::endl;
oofice::oofice(string roomName) :Room(roomName)
{
}
oofice::~oofice()
{
}
void oofice::setRoomName(){
cout << "当前房间的名字是:职员办公室" << endl;
}
第三个派生类Factory的头文件
#include "stdafx.h"
#include "Factory.h"
Factory::Factory(string roomName) :Room(roomName)
{
}
Factory::~Factory()
{
}
第三个派生类Factory的源文件
#include "stdafx.h"
#include "Factory.h"
Factory::Factory(string roomName) :Room(roomName)
{
}
Factory::~Factory()
{
}
测试代码:
int _tmain(int argc, _TCHAR* argv[])
{
Room *room = new oofice("");
room->setRoomName();
room = new Boss("jkl");
room->setRoomName();
room = new Factory("我是一个工厂");
room->setRoomName();
system("pause");
return 0;
}
运行的结果正如我想的那样:
当前房间的名字是:职员办公室
当前房间的名字是:老板办公室
当前房间的名字是:我是一个工厂
上一篇: 分析PE文件资源
下一篇: 一个判断图片格式的自定义函数