C++多态实例
2024-10-20 05:40:53
#include <iostream>
#include <string>
using namespace std; //class 实现
class Employee
{
string name;
public:
Employee(string n);
virtual void print();
}; //class 成员函数实现
Employee::Employee(string n) :name(n)//初始化成员列表
{
//name = n;
}
void Employee::print()
{
cout << name << endl;
} //class 实现
class Manager: public Employee
{
int level;
public:
Manager(string n, int l = );
//virtual void print();
void print();
}; //class 成员函数实现
Manager::Manager(string n, int l) :Employee(n), level(l)
{
} void Manager::print()
{
cout << level << "\t";
Employee::print();
}
////派生类的构造函数只能描述它自己的成员和其直接基类的初始式,不能去初始化基类的成员。
//Manager::Manager(string n, int l) : name(n), level(l)
//{
//} int main()
{
// Manager m("Zhang",2);
// Employee e("Li");
// m.print();
// e.print();
//
// cout<<"ok-----------"<<endl;
//
// Employee *p=&e;
// p->print();
// cout<<"ok-2222----------"<<endl;
//
// p=&m;
// p->print();
//
// cout<<"ooo"<<endl;
//
// Manager *q=&m;
// q->print(); // Employee *employees[100];
// int num = 0;
//
// employees[num] = &e;
// num++;
// employees[num] = &m;
// num++; /////////////////////////////////////////// Employee* employees[];
int e_num = ;
Employee* pe;
string name; int level;
char cmd; cout << "input cmd" << endl; while (cin >> cmd)
{
if (cmd == 'M' || cmd == 'm')
{
cout << "input name and level" << endl;
cin >> name >> level;
pe = new Manager(name, level);
employees[e_num] = pe;
e_num++;
}
else if (cmd == 'e' || cmd == 'E')
{
cout << "input name" << endl;
cin >> name;
pe = new Employee(name);
employees[e_num] = pe;
e_num++;
}
else
break;
cout << "input cmd" << endl;
}
for (int i = ; i < e_num; i++)
{
employees[i]->print();
} return ;
}
input cmd
M
input name and level
li 3
input cmd
m
input name and level
rr
4
input cmd
e
input name
bffd
input cmd
e
input name
sdfsdfsdf
input cmd
s
3 li
4 rr
bffd
sdfsdfsdf
通过基类指针Employee *pe可以指向基类和派生类。从而达到多态的效果。后面s后的就是输出的结果。
最新文章
- c#控制打印机杂项
- 借助 Lucene.Net 构建站内搜索引擎(下)
- context元素大概解说
- C. Shaass and Lights 组合数学
- 那些年,我们在Django web开发中踩过的坑(一)——神奇的‘/’与ajax+iframe上传
- 将类似 12.56MB 36.89KB 转成 以K为单位的数字【备忘】
- RPC应用的java实现(转)
- C编译: 动态连接库 (.so文件)
- PHP实现站点pv,uv统计(三)
- php引用计数与变量引用
- python2.7 使用super关键词 报错 TypeError: must be type, not&;n
- hdu 1878 无向图的欧拉回路
- CSS 图像左右对齐
- -如何存储并定时更新access_token
- Python-爬虫-租房Ziroom
- gdb fabs错误输出
- Vue学习五:v-for指令使用方法
- mongodb之oplog
- Ibatis.Net 输出SQL语句学习(七)
- python--ConfigParser读写改配置文件