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

简介: 【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


相关文章
|
6月前
|
安全 编译器 程序员
【C++】C++的类型转换
【C++】C++的类型转换
|
6月前
|
设计模式 安全 算法
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
212 0
|
1月前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
18 1
|
1月前
|
存储 编译器 数据安全/隐私保护
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解2
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
29 3
|
1月前
|
编译器 C++
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
44 3
|
6月前
|
存储 安全 编译器
C++:现代类型转换
C++:现代类型转换
47 5
|
1月前
|
C++
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
20 0
|
4月前
|
存储 安全 编译器
【C++11】类型转换
【C++11】类型转换
22 0
|
4月前
|
安全 程序员 编译器
C++一分钟之-C++中的类型转换
【7月更文挑战第8天】C++中的类型转换涉及隐式和显式操作,隐式转换如从`int`到`double`是自动的,但可能导致数据丢失。显式转换包括`static_cast`, `dynamic_cast`, `const_cast`, `reinterpret_cast`,以及转换构造函数。要避免数据丢失、类型不匹配和运行时错误,需谨慎使用显式转换并检查结果。过度使用`reinterpret_cast`应避免。理解这些转换有助于编写更安全的代码。
36 0
|
6月前
|
安全 程序员 C语言
从C语言到C++_37(特殊类设计和C++类型转换)单例模式(下)
从C语言到C++_37(特殊类设计和C++类型转换)单例模式
51 5