#include <iostream> #include <cstring> using namespace std; class namelist{ char *name; public: namelist(char *p){ name = new char[strlen(p) + 1]; if(name != 0){ strcpy(name,p); } } ~namelist(){ if(name != NULL) delete name; } namelist& operator = (char *p); namelist& operator = (namelist c); void display(){ cout << name <<endl; } }; namelist& namelist::operator = (char *p){ if(name != 0){ delete name; name = new char[strlen(p) + 1]; if(name != 0){ strcpy(name,p); } } return *this; } namelist& namelist::operator = (namelist c){ if(this != &c){ delete name; name = new char[strlen(c.name) + 1]; if(name != 0){ strcpy(name,c.name); } } return *this; } int main() { namelist n1("abc"),n2("bdc"); n1.display(); n2.display(); n1 = n2; n1.display(); n2.display(); return 0; }
时间: 2024-01-28 16:03:20 浏览: 67
这是一个 C++ 的程序,使用了类 namelist 来存储一个字符串。程序中定义了两个重载的运算符 =,分别用于将一个字符数组赋值给 namelist 对象,以及将一个 namelist 对象赋值给另一个 namelist 对象。在主函数中,创建了两个 namelist 对象 n1 和 n2,并分别赋值为 "abc" 和 "bdc"。然后将 n2 赋值给 n1,最后输出 n1 和 n2 的值。由于 namelist 类中重载了运算符 =,因此可以直接使用 = 运算符将一个 namelist 对象赋值给另一个 namelist 对象。输出结果为:bdc bdc bdc bdc。
相关问题
改写一下代码:#include<iostream> using namespace std; char st[200]; int main(){ while (scanf("%s",&st)==1) cout<<st<<" "; return 0; }
#include <iostream>
#include <cstring> // 添加头文件
using namespace std;
char st[200];
int main() {
while (scanf("%s", st) == 1) // 去掉取地址符&
cout << st << " ";
return 0;
}
#include<iostream> #include<string> #include<string.h> using namespace std; class Student { private: long num; int age; char* name; public: Student(long n,int a,const char* nam) { num=n; age=a; name=new char[strlen(nam)+1]; strcpy(name,nam); } void show_Student () { cout<<num<<" "<<age<<" "<<name<<" "<<endl; } void modify_name () { char* nam; cin>>nam; delete []name; name=new char[strlen(nam)+1]; strcpy(name,nam); } }; int main() { Student a(20222484,18,"lyc"); a.show_Student(); a.modify_name(); a.show_Student(); return 0; }优化上面代码
以下是优化后的代码:
```cpp
#include<iostream>
#include<string>
#include<cstring> // 使用cstring头文件代替string.h
using namespace std;
class Student {
private:
long num;
int age;
string name; // 使用string代替char*
public:
Student(long n, int a, const string& nam) : num(n), age(a), name(nam) {} // 使用初始化列表
void show_Student() {
cout << num << " " << age << " " << name << " " << endl;
}
void modify_name() {
string nam;
cin >> nam;
name = nam;
}
};
int main() {
Student a(20222484, 18, "lyc");
a.show_Student();
a.modify_name();
a.show_Student();
return 0;
}
```
优化的点如下:
1. 使用了string代替char*,避免手动内存管理和越界访问等问题。
2. 使用了初始化列表,避免在构造函数内部对成员变量进行赋值,提高代码效率。
3. 使用了cstring头文件代替string.h,cstring是C++中的标准头文件,string.h是C语言的头文件,虽然两者都可以使用,但是cstring更符合C++的风格。
阅读全文