纯虚函数和抽象类

1人阅读 评论(0) 收藏 举报
分类:

语法格式:

virtual 返回值类型 函数名 (函数参数) = 0;

 

含有纯虚函数的类为抽象类。

 

注意点:

抽象类不能常见对象:因为纯虚数没有函数体,不是完整的函数,无法调用,因此无法实例化。

抽象函数一般用来作为基类,让派生类去实现虚函数。

 

在这个抽象类中,如果有其他不是虚函数的成员函数,那么只要定义一个基类指针指向派生类,就可以直接调用这些正常的成员函数。

抽象类与虚函数的说明:

1) 一个纯虚函数就可以使类成为抽象基类,但是抽象基类中除了包含纯虚函数外,还可以包含其它的成员函数(虚函数或普通函数)和成员变量。

2) 只有类中的虚函数才能被声明为纯虚函数,普通成员函数和顶层函数均不能声明为纯虚函数。

多态实例代码:

 

//主程序
#include <iostream>
#include <string>
using namespace std;

#include "allclass.h"
int main()
{
	Employee *p[4];
	cout << "小时工" << endl;
	p[0] = new Technician();
	cout << p[0]->getname() << " 工号:" << p[0]->getnum() << " 薪水:" << p[0]->getsalary() << endl;
	cout << "销售人员:" << endl;
	p[1] = new Salesman();
	cout << p[1]->getname() << " 工号:" << p[1]->getnum() << " 薪水:" << p[1]->getsalary() << endl;
	cout << "管理员:" << endl;
	p[2] = new Manager();
	cout << p[2]->getname() << " 工号:" << p[2]->getnum() << " 薪水:" << p[2]->getsalary() << endl;
	cout << "销售经理" << endl;
	p[3] = new SaleManger();
	cout << p[3]->getname() << " 工号:" << p[3]->getnum() << " 薪水:" << p[3]->getsalary() << endl;



	system("pause");
}

//.h头文件
#include <iostream>
using namespace std;

class Employee 
{
public:
	 Employee();
	 virtual void setname();
	 virtual void setnum();
     virtual  string getname();
	 virtual string  getnum();
	 virtual double getsalary();
protected:
	string m_name;
	string m_num;
	double m_salary;
};

class Technician : public Employee
{
public:
	Technician();
	void SetWorkTime();
	void  SetWorkSalary();
	double getsalary();
private:
	double m_WorkTime;
	double m_WorkSalary;
};

class Salesman :public Employee
{
public :
	Salesman();
	virtual void SetSalePri();
	virtual void SetSalePro();
	double getsalary();
protected:
	double m_SalePri;
	double m_SalePro;
};

class Manager :public Employee
{
public:
	Manager();
	void SetFixSalary();
	double getsalary();
protected:
	double m_FixSalary;
};

class SaleManger : public Salesman
{
public:
	SaleManger();
	void SetFixSalary();
	double getsalary();
protected:
	double m_FixSalary;
};

//.cpp文件
#include "allclass.h"
#include<string>

Employee::Employee()
{
	setname();
	setnum();
}

string Employee::getname(){ return m_name; }

string Employee::getnum(){ return m_num; }

double Employee::getsalary(){ return m_salary; }


void Employee::setname()
{
	string name;
	cout << "输入姓名" << endl;
	getline(cin, name);
	m_name = name;
}

void Employee::setnum()
{
	string num;
	cout << "输入工号" << endl;
	getline(cin, num);
	m_num = num;
}

void Technician::SetWorkSalary()
{
	int salary;
	cout << "输入时薪" << endl;
	cin >> salary;
	m_WorkSalary= salary;
}

void Technician::SetWorkTime()
{
	int worktime;
	cout << "输入时长" << endl;
	cin >> worktime;
	m_WorkTime = worktime;
}

Technician::Technician()
{
	SetWorkSalary();
	SetWorkTime();
	cin.get();
}

double Technician::getsalary()
{
	m_salary = m_WorkTime*m_WorkSalary;
	return m_salary;
}

Salesman::Salesman()
{
	SetSalePri();
	SetSalePro();
	cin.get();
}

void Salesman::SetSalePri()
{
	cout << "输入销售额" << endl;
	cin >> m_SalePri;
}

void Salesman::SetSalePro()
{
	cout << "输入销售比例" << endl;
	cin >>m_SalePro;
}

double Salesman::getsalary()
{
	m_salary = m_SalePro*m_SalePri;
	return m_salary;
}

Manager::Manager()
{
	SetFixSalary();
	cin.get();
}

void Manager::SetFixSalary()
{
	cout << "固定薪资" << endl;
	cin >> m_FixSalary;
}

double Manager::getsalary()
{
	m_salary = m_FixSalary;
	return m_salary;
}

SaleManger::SaleManger()
{
	SetFixSalary();
	cin.get();
}

void SaleManger::SetFixSalary()
{
	cout << "固定薪资" << endl;
	cin >> m_FixSalary;
}

double SaleManger::getsalary()
{
	m_salary = m_FixSalary+Salesman::getsalary();
	return m_salary;
} 

查看评论

C++学习篇——纯虚函数和抽象类

纯虚函数是一种特殊的虚函数,它的一般格式如下:     class     {         virtual ()=0;         …     };     在许多情况下...
  • yansmile1
  • yansmile1
  • 2016-04-13 23:03:24
  • 637

C++虚函数和纯虚函数和抽象类

C++虚函数和纯虚函数和抽象类分析
  • x_r_su
  • x_r_su
  • 2016-08-31 13:31:53
  • 970

纯虚函数 抽象类

虚函数是C++多态的一种表现 ,例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为virturl(虚函数)。 使用虚函数,我们可以灵活的进行动态绑定,...
  • stevenzhang1986
  • stevenzhang1986
  • 2011-07-04 15:10:34
  • 2383

虚函数、纯虚函数、抽象类、抽象方法和接口

首先讲下自己最近的电话面试遇到的相关问题。1、多态的两种实现方式?2、虚函数与纯虚函数的区别,如何使用这两种方式?3、接口和抽象类的关系?由这两个问题开始深入的理解一下虚函数,纯虚函数以及抽象类和接口...
  • feihaixin
  • feihaixin
  • 2015-02-15 14:44:05
  • 841

虚函数和纯虚函数 动态绑定

1.虚函数 纯虚函数: 1.虚函数和纯虚函数可以定义在同一个类中,含有纯虚函数的类被称为抽象类,而只含有虚函数的类不能被称为抽象类。 2.虚函数可以被直接使用,也可以被子类重载以后,以多态的形式调...
  • climb_up
  • climb_up
  • 2013-10-04 11:16:16
  • 716

纯虚函数和抽象类的实例

  • 2015年04月14日 19:33
  • 1.67MB
  • 下载

C++与C#中的虚函数、纯虚函数、抽象类的对比

一、C++中            1、虚函数(virtual)     第一次引入虚拟函数的基类时,必须在类声明中指定virtual关键字。如果虚函数的定义放在类的外面,则不能再次指定关键字vi...
  • u010168160
  • u010168160
  • 2014-04-05 17:48:16
  • 4264

C++里的抽象类和纯虚函数

C++里的抽象类和纯虚函数在C++中,含有至少一个纯虚函数的类是抽象类,但是注意在C++中没有abstract这个关键字,所以C++里面的抽象类无需添加abstract这个单词。抽象类不可以直接实例化...
  • Lv_Victor
  • Lv_Victor
  • 2016-09-12 09:57:45
  • 506

虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承

虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承 虚函数:虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。是C++中多态...
  • fanbird2008
  • fanbird2008
  • 2013-11-21 17:07:29
  • 684

对C++中纯虚函数和抽象类的认识

一:虚函数 声明格式:virtual  类型  函数名(参数表)=0; 纯虚函数没有函数体。 纯虚函数是在基类中声明的,没有函数体。 如果是析构函数,则要有函数体。 二:抽象类 带有纯虚函...
  • CSDN_LYY
  • CSDN_LYY
  • 2015-04-20 22:18:52
  • 255
    个人资料
    持之以恒
    等级:
    访问量: 2732
    积分: 596
    排名: 8万+
    文章存档