this->R = R; this->name = new char[strlen(Name)+1]; strcpy(this->name,Name); cout<<"Circle R:"<<this->R<<endl<<"Circle Name:"<<this->name<<endl;
时间: 2023-06-27 17:04:45 浏览: 174
这段代码是一个圆形类中的构造函数。其中,R和Name是构造函数的参数,this指针则指向当前对象本身。
第一行代码将参数R赋值给当前对象的R成员变量。
第二行代码中,使用new运算符为name成员变量分配动态内存,大小为传入的字符串长度加1(用于存储字符串结尾的'\0'字符)。
第三行代码使用strcpy函数将Name字符串复制到当前对象的name成员变量中。
最后一行代码输出圆形的半径和名称。
相关问题
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; }这个函数的形参为什么要加引用
这个函数的形参 `namelist& c` 加引用是为了避免进行对象的拷贝构造,从而提高程序的效率。如果不加引用,那么在调用赋值运算符时,会进行对象的拷贝构造,这样会在内存中创建一个新的对象,再进行赋值操作,增加了程序的开销。而加上引用后,实际上是直接操作传入的对象,避免了对象的拷贝构造,提高了程序的效率。此外,使用引用传参还可以避免不必要的内存分配和释放,减少了程序的开销。
#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++的风格。
阅读全文