【C++之类型转换】学生留校担任老师

题目要求

定义一个 Teacher(教师)类和一个 Student(学生)类,二者有一部分数据成员是相同的,例如 num, name, sex 。编写程序,将一个 Student 对象(学生)转换为Teacher(教师)类,只将以上3个相同的数据成员移植过去。可以设想为:一个学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的数据的一部分

——谭浩强的《C++面向对象程序设计》第4章习题第7小题

程序

/*
*************************************************************************
@file:    main.cpp
@date:   2020.12.5
@author: Xiaoxiao
@brief:   学生留校担任老师
@blog:    https://blog.csdn.net/weixin_43470383/article/details/110679348
*************************************************************************
*/
#define _CRT_SECURE_NO_WARNINGS
// VS中屏蔽函数strcpy()的错误,注意必须放首行!
#include <iostream>
using namespace std;

class Student
{
public:
	Student(int n, char nam[], char s, float sc) ; 
	// 实现初始化的构造函数
	int get_num() { return num; }
	char * get_name() { return name; }
	char get_sex() { return sex; }
	void display();

private:
	int num;
	char name[10];
	char sex;
	float score;
};

Student::Student(int n, char nam[], char s,float sc)
{
	num = n;
	strcpy(name, nam);
	sex = s;
	score = sc;
}

void Student::display()
{
	cout << "num:" << num << "\nname:" << name << "\nsex:" << sex << "\nscore:" << score << "\n\n";
}

class Teacher
{
public:
	Teacher() {}; // 默认构造函数
	Teacher(Student&); // 转换构造函数
	Teacher(int n, char nam[], char s, float w); // 实现初始化的构造函数
	void display();

private:
	int num;
	char name[20];
	char sex;
	float wage;
};

Teacher::Teacher(int n, char nam[], char s, float w)
{
	num = n;
	strcpy(name, nam);
	sex = s;
	wage = w;
}

Teacher::Teacher(Student& stud)
{
	num = stud.get_num();
	strcpy(name, stud.get_name());
	sex = stud.get_sex();
	wage = 10000;
}

void Teacher::display()
{
	cout << "num:" << num << "\nname:" << name << "\nsex:" << sex << "\nwage:" << wage << "\n\n";
}


int main()
{
	Teacher teacher1(30001226, "Zhou", 'm', 12000.0), teacher2;
	Student student1(21030208, "Xiaoxiao", 'f', 100.0);
	cout << "student1:" << endl;
	student1.display();
	teacher2 = Teacher(student1); // 将 student1 转为 Teacher 类型
	cout << "teacher2:" << endl;
	teacher2.display();
	system("pause");
	return 0;
}

运行结果

运行结果
输出:
student1:
num:21030208
name:Xiaoxiao
sex:f
score:100

teacher2:
num:21030208
name:Xiaoxiao
sex:f
wage:10000

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不雨_亦潇潇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值