C++没有参数列表匹配的构造函数是什么意思,char *name是什么意思,strcpy
时间: 2023-08-28 18:05:12 浏览: 176
C++中的参数列表匹配指的是在调用一个函数或构造函数时,实参和形参之间匹配的过程。没有参数列表匹配的构造函数意味着该构造函数没有参数,或者参数的类型和数量与调用时提供的实参不匹配。
char *name是一个指向字符型数据的指针,它可以指向一个字符串,也可以用于处理单个字符。
strcpy是C++中的一个字符串拷贝函数,它的作用是将一个字符串从源地址复制到目标地址,即将一个字符串赋值给另一个字符串。这个函数需要两个参数,第一个参数是目标地址,第二个参数是源地址。例如,strcpy(dest, src)就是将src字符串复制到dest字符串中。
相关问题
定义一个员工类Employee,包含两个私有成员变量,分别为char型指针变量m_name(姓名)和m_no(员工号);用于初始化成员变量的构造函数Employee(char *name,char *no);用于销毁m_name和m_no所指内存空间的析构函数~Employee();用于输出员工信息的Display()函数;以Employee类作为基类,派生出领导类Leader,新增成员:一个私有成员变量,char型指针变量m_posdes(职位描述);用于初始化成员变量的构造函数Leader(char *name, char *no, char *posdes);用于销毁m_posdes所指内存空间的析构函数~Leader();用于输出领导信息的Display()函数。
下面是代码实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class Employee {
private:
char *m_name;
char *m_no;
public:
Employee(char *name, char *no) {
m_name = new char[strlen(name) + 1];
strcpy(m_name, name);
m_no = new char[strlen(no) + 1];
strcpy(m_no, no);
}
~Employee() {
delete[] m_name;
delete[] m_no;
}
void Display() {
cout << "Name: " << m_name << endl;
cout << "No.: " << m_no << endl;
}
};
class Leader : public Employee {
private:
char *m_posdes;
public:
Leader(char *name, char *no, char *posdes) : Employee(name, no) {
m_posdes = new char[strlen(posdes) + 1];
strcpy(m_posdes, posdes);
}
~Leader() {
delete[] m_posdes;
}
void Display() {
cout << "Name: " << m_name << endl;
cout << "No.: " << m_no << endl;
cout << "Position Description: " << m_posdes << endl;
}
};
int main() {
Employee emp("Tom", "001");
emp.Display();
Leader leader("Jerry", "002", "Manager");
leader.Display();
return 0;
}
```
在这个实现中,先定义了一个基类 `Employee`,它有两个私有成员变量 `m_name` 和 `m_no`,以及一个构造函数 `Employee(char *name, char *no)` 和一个析构函数 `~Employee()`,以及一个输出员工信息的函数 `Display()`。这些函数和变量都被定义为私有的,只能在类内部访问。
然后通过 `public` 继承的方式,定义一个派生类 `Leader`。在 `Leader` 类中新增了一个私有成员变量 `m_posdes`,以及一个构造函数 `Leader(char *name, char *no, char *posdes)` 和一个析构函数 `~Leader()`,以及一个输出领导信息的函数 `Display()`。在 `Leader` 类的构造函数中,先调用基类 `Employee` 的构造函数进行初始化,然后再初始化 `m_posdes` 变量。
在 `main()` 函数中,分别创建了一个 `Employee` 对象和一个 `Leader` 对象,并调用它们的 `Display()` 函数输出信息。
定义一个雇员类Employee,包含char型数组成员变量m_cName(姓名)和m_cNo(编号),int型成员变量m_nDepartment(部门号),成员函数SetName(char *pcName)、SetNo(char *pcNo)和SetDept(int nDept)分别用来设置姓名、编号和部门号,Display()函数用来输出雇员的信息,还包含一个构造函数Employee(char *pcName, char *pcNo, int nDept)。定义一个经理类Manager,派生于雇员类Employee,新增成员变量m_nLevel表示级别和成员函数SetLvl(int nLvl)用来设置m_nLevel,重定义Display()用来输出经理的信息。 要求: (1)Manager类的成员函数可以直接访问Employee类中的成员变量,但类的外部不能直接访问。 (2)在主函数中分别创建一个雇员类对象和一个经理类对象,并输出对象的信息。
以下是定义的 Employee 和 Manager 类的代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class Employee {
private:
char m_cName[20];
char m_cNo[10];
int m_nDepartment;
public:
Employee(char *pcName, char *pcNo, int nDept) {
strcpy(m_cName, pcName);
strcpy(m_cNo, pcNo);
m_nDepartment = nDept;
}
void SetName(char *pcName) {
strcpy(m_cName, pcName);
}
void SetNo(char *pcNo) {
strcpy(m_cNo, pcNo);
}
void SetDept(int nDept) {
m_nDepartment = nDept;
}
void Display() {
cout << "Name: " << m_cName << endl;
cout << "No.: " << m_cNo << endl;
cout << "Department: " << m_nDepartment << endl;
}
};
class Manager : public Employee {
private:
int m_nLevel;
public:
Manager(char *pcName, char *pcNo, int nDept, int nLvl) : Employee(pcName, pcNo, nDept) {
m_nLevel = nLvl;
}
void SetLvl(int nLvl) {
m_nLevel = nLvl;
}
void Display() {
Employee::Display();
cout << "Level: " << m_nLevel << endl;
}
};
int main() {
Employee emp("John Smith", "1001", 1);
emp.Display();
cout << endl;
Manager mgr("Jane Doe", "2001", 2, 3);
mgr.Display();
return 0;
}
```
在主函数中分别创建了一个 Employee 对象和一个 Manager 对象,并分别调用 Display 函数输出了它们的信息。注意,Manager 类继承了 Employee 类中的成员变量和函数,并且重定义了 Display 函数以输出经理的信息。在 Manager 类中,可以直接访问 Employee 类中的成员变量。
阅读全文