C++入门经典-例8.10-实现抽象类中的成员函数
1:抽象类通常作为其他类的父类,如果从抽象类派生的子类是抽象类,则子类必须实现父类中的所有纯虚函数。代码如下:
// 8.10.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
using namespace std; class CEmployee //定义CEmployee类
{
public:
int m_ID; //定义数据成员
char m_Name[]; //定义数据成员
char m_Depart[]; //定义数据成员
virtual void OutputName() = ; //定义抽象成员函数
}; class COperator :public CEmployee //定义COperator类,派生于CEmployee类
{
public:
char m_Password[]; //定义数据成员
void OutputName() //实现父类中的纯虚成员函数
{
cout << "操作员姓名: "<<m_Name<< endl; //输出信息
}
COperator() //定义COperator类的默认构造函数
{
strcpy(m_Name,"MR"); //设置数据成员m_Name信息
}
};
class CSystemManager :public CEmployee //定义CSystemManager类
{
public:
char m_Password[]; //定义数据成员
void OutputName() //实现父类中的纯虚成员函数
{
cout << "系统管理员姓名: "<<m_Name<< endl; //输出信息
}
CSystemManager() //定义CSystemManager类的默认构造函数
{
strcpy(m_Name,"SK"); //设置数据成员m_Name信息
}
};
int main(int argc, char* argv[]) //主函数
{
CEmployee *pWorker; //定义CEmployee类型指针对象
pWorker = new COperator(); //调用COperator类的构造函数为pWorker赋值
pWorker->OutputName(); //调用COperator类的OutputName成员函数
delete pWorker; //释放pWorker对象
pWorker = NULL; //将pWorker对象设置为空
pWorker = new CSystemManager(); //调用CSystemManager类的构造函数为pWorker赋值
pWorker->OutputName(); //调用CSystemManager类的OutputName成员函数
delete pWorker; //释放pWorker对象
pWorker = NULL; //将pWorker对象设置为空
return ;
}
运行结果:
程序中,从CEmployee类派生出了两个子类,分别为COperator和CSystemManager。这两个类分别实现了父类的纯虚函数OutputName。同样一条语句“pWorker->OutputName();”,由于pWorker指向的对象不同,其行为也不同。
C++入门经典-例8.10-实现抽象类中的成员函数的更多相关文章
- C++入门经典-例8.9-抽象类,纯虚函数,创建纯虚函数
1:包含有纯虚函数的类称为抽象类,一个抽象类至少具有一个纯虚函数.抽象类只能作为基类派生出的新的子类,而不能在程序中被实例化(即不能说明抽象类的对象),但是可以使用指向抽象类的指针.在程序开发过程中并 ...
- C++入门经典-例5.9-使用空类型指针执行函数
1:运行代码: // 5.9.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- C++入门经典-例7.1-对象之访问类成员
1:建立一个类CPerson. (1)在person.h文件中代码: class CPerson { public: //数据成员 int m_iIndex; ]; short m_shAge; do ...
- C++入门经典-例4.1-声明、定义和使用函数
1:代码如下: // 4.1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- C++入门经典-例2.5-使用附加格式说明scanf函数的格式输入
1:代码如下: // 2.5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int main() { long iLong; /*长整型变 ...
- C++入门经典-例9.1-函数模板,函数模板的作用,使用数组作为模板参数
1:函数模板不是一个实在的函数,因此编译器不能为其生成可执行的代码.定义函数模板只是一个对函数功能框架的描述,在具体执行时,将根据传递的实际参数决定其功能. 2:函数模板定义的一般形式如下: temp ...
- C++入门经典-例7.10-运算符的重载,重载加号运算符
1:曾经介绍过string类型的数据,它是C++标准模版库提供的一个类.string类支持使用加号“+”连接两个string对象.但是使用两个string对象相减确实非法的,其中的原理就是C++所提供 ...
- C++入门经典-例7.6-this指针,同一个类的不同对象数据
1:对于类的非静态成员,每个对象都有自己的一份拷贝,即每个对象都有自己的数据成员,不过成员函数却是每个对象共享的.那么调用共享的成员函数如何找到自己的数据成员呢?答案是通过类中隐藏的this指针. 2 ...
- 【PHP面向对象(OOP)编程入门教程】6.如何去使用对象中的成员
上面看到PHP对象中的成员有两种一种是成员属性, 一种是成员方法.对象我们以经可以声明了,$p1=new Person(); 怎么去使用对象的成员呢?要想访问对象中的成员就要使用一个特殊的操作符”-& ...
随机推荐
- java 读取property
Properties prop = new Properties(); String path = AlarmController.class.getResource("/").g ...
- Nginx访问限制配置
Nginx访问限制配置 nginx访问限制可以基于两个方面,一个是基于ip的访问控制,另一个是基于用户的信任登陆控制 下面我们将对这两种方法逐个介绍 基于IP的访问控制 介绍: 可以通过配置基于ip的 ...
- textarea回填数据显示自适应高度
queryTextArea(){ var textAll = document.getElementById('templaInner').querySelectorAll("textare ...
- 【2017-05-04】winfrom进程、线程、用户控件
一.进程 一个进程就是一个程序,利用进程可以在一个程序中打开另一个程序. 1.开启某个进程Process.Start("文件缩写名"); 注意:Process要解析命名空间. 2. ...
- ORALCE 数据库字符串处理、常用函数
.字符串转日期: to_date(paramStr,'YYYYMMDDHH24MISS') to_date(paramStr,'yyyy-MM-DD') to_date(paramStr,'yyyy/ ...
- unix/linux共享库(动态库)简介
一.创建共享库: 1.写源程序 xxx1.c xxx2.c.../*.c(通配符方式) 2.编译源程序,加-fpic生成.o文件 gcc -c -fpic xxx1.c xxx2.c.../*.c(通 ...
- python函数:叠加装饰器、迭代器、自定义迭代器、生成式
一.叠加多个装饰器二.迭代器三.自定义迭代器四.xxx生成式 一.叠加多个装饰器 # 加载装饰器就是将原函数名偷梁换柱成了装饰器最内层那个wrapper函数 # 在加载完毕后,调用原函数其实就是在调用 ...
- Bridge 桥梁模式
注:桥梁模式是结构型设计模式,将抽象部分与它的实现部分相分离,使他们可以独立的变化. 抽象部分可能有n种实现,而实现部分可能有n种实现方式,采用享元模式,减少子类数据. 曾经看过一个桥梁模式相关的例 ...
- .net core 读取appsettings 的配置
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default&quo ...
- FutureWarning: get_value is deprecated and will be removed in a future release. Please use .at[] or .iat[] accessors instead print(labels_df.get_value(patients,col=1))
这是因为pandas的版本高了,0.21之后就已经将这个方法干掉了.直接装成0.20之前的就好