当前位置:首页 > 开发 > 编程语言 > C/C++ > 正文

c++ 基类派生类 继承与虚函数

发表于: 2014-08-13   作者:墙头上一根草   来源:转载   浏览:
摘要: 与java相比,c++的继承个人觉得有点复杂,复杂在构造函数上,java中派生类实现基类的构造函数直接super关键字,就可以实现,c++中则要通过实现构造函数,看下面的例子   特别说明的是:基类的希望派生类实现的函数一定要用virtual 标明为虚函数,虚函数是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;
}

 

运行的结果正如我想的那样:

 

当前房间的名字是:职员办公室
当前房间的名字是:老板办公室
当前房间的名字是:我是一个工厂

c++ 基类派生类 继承与虚函数

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
基类TableTennisPlayer 派生类RatedPlayer 1. 基类指针可以在不进行显示类型转换的情况下指向派生类
一、不能自动继承的成员函数 构造函数 析构函数 =运算符 二、继承与构造函数 基类的构造函数不被继
一、不能自动继承的成员函数 构造函数(包括拷贝构造函数) 析构函数 =运算符 二、继承与构造函数
C++ Primer 学习笔记_35_面向对象编程(2)--继承(二):继承与构造函数、派生类到基类的转换 、基类
我们知道,如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中
1.多重继承带来的问题 C++虚拟继承一般发生在多重继承的情况下。C++允许一个类有多个父类,这样就形
/* *Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:d.cpp *作
#include <iostream> using namespace std; class furniture { public: furniture( int nWeig
1. 顺序 当创建一个派生类的对象时,系统首先自动创建一个基类对象,也就是说,在调用派生类构造函
虚基类是用关键字virtual声明继承的父类,即便该基类在多条链路上被一个子类继承,但是该子类中只包
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号