在课后题12.2(创建一个Employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。把表示构造函数、ChangeName()、Display()的函数原型放在类定义中,构造函数初始化每个成员,Display()函数把完整的对象数据打印出来。其中的数据成员是保护的,函数是公共的。)的基础上: 将姓名构成类Name,其名和姓在该类中为保护数据成员,其构造函数为接收一个指向完整姓名字符串的指针,其Display()函数输出姓名。然后将Employee类中的姓名成员(字符数组)换成Name类对象。 将所有原型化的函数加上成员函数定义,作为类的内部实现文件。 构成完整的类库定义,要求类定义与类的成员函数定义分开。 主函数实现用户信息显示。 int main(){ Employee em("Mark Brooks","5 West St.","Revere","CA","12290"); em.Display(); em.ChangeName("Richard Voss"); em.Display(); }
时间: 2023-05-18 09:02:39 浏览: 204
好的,根据您的要求,我将扮演一个由 CSDN 开发的 C 知道,是一个类 ChatGPT 的 AI,我会尽力回答您的问题。
对于您的第一个问题,根据课后题 12.2 的要求,我们需要创建一个 Employee 类,其中包含姓名、街道地址、市、省和邮政编码等信息。我们可以将姓名构成一个类 Name,其名和姓为保护数据成员,构造函数接收一个指向完整姓名字符串的指针,Display() 函数输出姓名。然后将 Employee 类中的姓名成员(字符数组)换成 Name 类对象。
以下是完整的类定义和成员函数定义,分别放在不同的文件中:
Name.h:
```
#ifndef NAME_H
#define NAME_H
#include <string>
class Name {
protected:
std::string firstName;
std::string lastName;
public:
Name(const char* fullName);
void Display() const;
};
#endif
```
Name.cpp:
```
#include "Name.h"
#include <iostream>
Name::Name(const char* fullName) {
// 将完整姓名字符串分割成名和姓
std::string fullNameStr(fullName);
size_t pos = fullNameStr.find(' ');
firstName = fullNameStr.substr(0, pos);
lastName = fullNameStr.substr(pos + 1);
}
void Name::Display() const {
std::cout << firstName << " " << lastName << std::endl;
}
```
Employee.h:
```
#ifndef EMPLOYEE_H
#define EMPLOYEE_H
#include "Name.h"
class Employee {
protected:
Name name;
std::string streetAddress;
std::string city;
std::string state;
std::string zipCode;
public:
Employee(const char* fullName, const char* street, const char* c, const char* s, const char* zip);
void Display() const;
void ChangeName(const char* fullName);
};
#endif
```
Employee.cpp:
```
#include "Employee.h"
#include <iostream>
Employee::Employee(const char* fullName, const char* street, const char* c, const char* s, const char* zip)
: name(fullName), streetAddress(street), city(c), state(s), zipCode(zip) {}
void Employee::Display() const {
std::cout << "Name: ";
name.Display();
std::cout << "Street Address: " << streetAddress << std::endl;
std::cout << "City: " << city << std::endl;
std::cout << "State: " << state << std::endl;
std::cout << "Zip Code: " << zipCode << std::endl;
}
void Employee::ChangeName(const char* fullName) {
name = Name(fullName);
}
```
在主函数中,我们可以创建一个 Employee 对象,然后调用其 Display() 函数和 ChangeName() 函数,最后再次调用 Display() 函数来显示修改后的信息。
```
#include "Employee.h"
int main() {
Employee em("Mark Brooks", "5 West St.", "Revere", "CA", "12290");
em.Display();
em.ChangeName("Richard Voss");
em.Display();
return 0;
}
```
希望这个回答能够帮助到您!
阅读全文