转换构造函数之将另一个类的对象转换成转换构造函数所在的类对象。
方法一:
#include<iostream>
#include<cstring>
using namespace std;
class Student
{
public:
Student(int n,const char nam[],char s)
{
num=n;
strcpy(name,nam);
sex=s;
}
void display()
{
cout<<"num:"<<num<<"\nname:"<<name<<"\nsex:"<<sex<<"\n\n";
}
public:
int num;
char name[20];
char sex;
};
class Teacher
{
public:
Teacher()
{
}
Teacher(Student &s)
{
num=s.num;
strcpy(name,s.name);
sex=s.sex;
}
void display()
{
cout<<"num:"<<num<<"\nname:"<<name<<"\nsex:"<<sex<<"\n\n";
}
private:
int num;
char name[20];
char sex;
};
int main()
{
Teacher teacher;
Student student(20010,"Wang",'m');
cout<<"student:"<<endl;
student.display();
teacher=Teacher(student);
cout<<"teacher:"<<endl;
teacher.display();
return 0;
}
在VS2019下,需将源文件的strcpy做些修改:
#include<iostream>
#include<cstring>
using namespace std;
class Student
{
public:
Student(int n, const char nam[], char s)
{
num = n;
strcpy_s(name,strlen(nam)+1,nam);
sex = s;
}
void display()
{
cout << "num:" << num << "\nname:" << name << "\nsex:" << sex << "\n\n";
}
public:
int num;
char name[20];
char sex;
};
class Teacher
{
public:
Teacher()
{
}
Teacher(Student& s)
{
num = s.num;
strcpy_s(name,strlen(s.name)+1, s.name);
sex = s.sex;
}
void display()
{
cout << "num:" << num << "\nname:" << name << "\nsex:" << sex << "\n\n";
}
private:
int num;
char name[20];
char sex;
};
int main()
{
Teacher teacher;
Student student(20010, "Wang", 'm');
cout << "student:" << endl;
student.display();
teacher = Teacher(student);
cout << "teacher:" << endl;
teacher.display();
return 0;
}
方法二:
#include<iostream>
#include<cstring>
using namespace std;
class Student
{
public:
Student(int n,const char nam[],char s)
{
num=n;
strcpy(name,nam);
sex=s;
}
int get_num()
{
return num;
}
char* get_name()
{
return name;
}
char get_sex()
{
return sex;
}
void display()
{
cout<<"num:"<<num<<"\nname:"<<name<<"\nsex:"<<sex<<"\n\n";
}
private:
int num;
char name[20];
char sex;
};
class Teacher
{
public:
Teacher()
{
}
Teacher(Student &s)
{
num=s.get_num();
strcpy(name,s.get_name());
sex=s.get_sex();
}
void display()
{
cout<<"num:"<<num<<"\nname:"<<name<<"\nsex:"<<sex<<"\n\n";
}
private:
int num;
char name[20];
char sex;
};
int main()
{
Teacher teacher;
Student student(20010,"Wang",'m');
cout<<"student:"<<endl;
student.display();
teacher=Teacher(student);
cout<<"teacher:"<<endl;
teacher.display();
return 0;
}
在VS2019下,需将源文件的strcpy做些修改:
#include<iostream>
#include<cstring>
using namespace std;
class Student
{
public:
Student(int n, const char nam[], char s)
{
num = n;
strcpy_s(name,strlen(nam)+1 ,nam);
sex = s;
}
int get_num()
{
return num;
}
char* get_name()
{
return name;
}
char get_sex()
{
return sex;
}
void display()
{
cout << "num:" << num << "\nname:" << name << "\nsex:" << sex << "\n\n";
}
private:
int num;
char name[20];
char sex;
};
class Teacher
{
public:
Teacher()
{
}
Teacher(Student& s)
{
num = s.get_num();
strcpy_s(name, strlen(s.get_name()) + 1,s.get_name());
sex = s.get_sex();
}
void display()
{
cout << "num:" << num << "\nname:" << name << "\nsex:" << sex << "\n\n";
}
private:
int num;
char name[20];
char sex;
};
int main()
{
Teacher teacher;
Student student(20010, "Wang", 'm');
cout << "student:" << endl;
student.display();
teacher = Teacher(student);
cout << "teacher:" << endl;
teacher.display();
return 0;
}