最佳答案是:
char * strcpy(char * strDest,const char * strSrc)
{
char * strDestCopy=strDest; //[3]
if((strDest==NULL)||(strSrc==NULL)) //[1]
throw "Invalid argument(s)"; //[2]
while((*strDest++=*strSrc++)!='\0'); //[4]
return strDestCopy;
}
返回strDest的原始值使函数能够支持链式表达式,增加了函数的“附加值”。同样功能的函数,如果能合理地提高的可用性,自然就更加理想
三、使用继承实现以下几个类
Person(5分)
Student(10分)
GarduateStudent(15分)
#include <iostream>
#include <cstring>
using namespace std;
class Person
{
public:
Person()
{
next_id++;
name = new char[1];
strcpy(name, "");
id = next_id;
}
Person(char* _name)
{
next_id++;
name = new char[strlen(_name)+1];
strcpy(name, _name);
id = next_id;
}
Person(const Person& _p)
{
next_id++;
name = new char[strlen(_p.name)+1];
strcpy(name, _p.name);
id = next_id;
}
const Person& operator=(const Person& p)
{
if (this != &p)
{
delete []name;
name = new char[strlen(p.name)+1];
strcpy(name, p.name);
id = p.id;
}
return *this;
}
~Person()
{
delete [] name;
name = NULL;
}
void print()
{
cout<<" 名字为 :"<<name<<"id:"<<id<<endl;
}
private:
char* name;
int id;
static int next_id;
};
int Person::next_id = 0;
class Student:public Person
{
public:
Student()
{
label = new char[1];
strcpy(label, "");
grade = 0;
}
Student(char* _name,char* _label,int _grade):Person(_name)
{
label = new char[strlen(_label)+1];
strcpy(label, _label);
grade = _grade;
}
Student(const Student& s):Person(s)
{
label = new char[strlen(s.label)+1];
strcpy(label, s.label);
grade = s.grade;
}
const Student& operator=(const Student& s)
{
if (this != &s)
{
Person::operator=(s);
delete [] label;
label = new char[strlen(s.label)+1];
strcpy(label, s.label);
grade = s.grade;
}
return *this;
}
~Student()
{
delete [] label;
label = NULL;
}
void print()
{
Person::print();
cout<<"label:"<<label<<"grade:"<<grade<<endl;
}
private:
char* label;
int grade;
};
class GraduateStudent:public Student
{
public:
GraduateStudent()
{
message = new char[1];
strcpy(message, "");
salary = 1000;
}
GraduateStudent(char* _name,char* _label,int _grade,char* _message,int _salary):Student(_name,_label,_grade)
{
message = new char[strlen(_message)+1];
strcpy(message, _message);
salary = _salary;
}
GraduateStudent(const GraduateStudent& g):Student(g)
{
message = new char[strlen(g.message)+1];
strcpy(message, g.message);
salary = g.salary;
}
const GraduateStudent& operator=(const GraduateStudent& g)
{
if (this != &g)
{
Student::operator=(g);
delete [] message;
message = new char[strlen(g.message)+1];
strcpy(message, g.message);
salary = g.salary;
}
return *this;
}
~GraduateStudent()
{
delete [] message;
message = NULL;
}
void print()
{
Student::print();
cout<<"message:"<<message<<"salary:"<<salary<<endl;
}
private:
char* message;// 盛放毕业信息
int salary;
};
int main()
{
Person p;
Person p1("zhangsan");
Person p2(p1);
p2.print();
p2 = p;
p1.print();
cout<<"test student"<<endl;
Student s;
Student s1("lisi","student1",100);
Student s2(s1);
s2.print();
s2=s;
s1.print();
cout<<"test graduatestudent"<<endl;
GraduateStudent gs;
GraduateStudent gs1("wangwu","student2",99,"biyesheng",10000);
GraduateStudent gs2(gs1);
gs2.print();
gs2 = gs;
gs1.print();
return 0;
}
|