如何理解String(const char *c=" "); //默认构造+转换构造函数 *c=""是什么意思,char*()是什么意思
时间: 2024-04-26 18:20:05 浏览: 80
这是一个带有默认参数值的构造函数,它可以用来构造一个字符串对象。参数 `const char *c` 表示传入一个指向字符数组的指针,即一个 C 风格的字符串。而 `= " "` 表示如果没有传入任何参数,则默认为一个空格字符串。
`*c=""` 的意思是将指针 `c` 所指向的字符数组的第一个元素设置为空字符,即表示一个空的字符串。而 `char*()` 是一个类型转换操作符,它可以将一个对象转换为指向字符数组的指针,这样就可以将一个字符串对象转换为 C 风格的字符串。
需要注意的是,这里的字符串对象是指 C++ 标准库中的 `std::string` 类型。
相关问题
优化这段代码#include <iostream> #include <fstream> #include <vector> using namespace std; class student { private: string name; const char* uni = "云南大学";//const常量 string department; string major; int age; long number; public: //static成员 static char* ident; //不带参数的构造函数 student() { number = 20201120425; name = "王文言"; department = "软件学院"; age = 21; major = "软件工程专业"; }
这段代码已经很简洁,但仍有一些可以优化的地方:
1. 类成员变量的初始化
可以使用成员初始化列表来初始化类成员变量,以提高效率。这样,成员变量的初始化将在对象构造时一次性完成,而不是先默认初始化,再赋值。
2. const常量的赋值方式
可以将const常量的值在定义时直接赋值,而无需在构造函数中进行赋值。
综上所述,优化后的代码如下:
```C++
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
class student {
private:
string name;
const char* uni = "云南大学";
string department;
string major;
int age;
long number;
public:
//static成员
static char* ident;
//不带参数的构造函数
student() : name("王文言"), department("软件学院"), major("软件工程专业"), age(21), number(20201120425) {}
};
```
在上面的代码中,我们使用了成员初始化列表来初始化成员变量,将const常量的值在定义时直接赋值,而无需在构造函数中进行赋值。
优化这段代码 #include <iostream> #include <fstream> #include <vector> using namespace std; class student { private: string name; const char* uni = "云南大学";//const常量 string department; string major; int age; long long number; public: //static成员 static char* ident; //不带参数的构造函数 student() { number = '20201120425'; name = "王文言"; department = "软件学院"; age = 21; major = "软件工程专业"; }
在这段代码中,我们可以进行以下优化:
1. 类成员变量的初始化
类成员变量可以在构造函数中进行初始化,而不需要在类定义中进行初始化。因此,我们可以将成员变量的初始化从类定义中移除,改为在构造函数中进行初始化。
2. 使用初始化列表
在构造函数中,我们可以使用初始化列表来初始化成员变量,这样可以提高代码的执行效率。因为在初始化列表中,成员变量是直接初始化的,而在构造函数体中,成员变量是先进行默认初始化,然后再进行赋值操作的。
3. 数字类型的赋值方式
在代码中,我们将学号赋值为'20201120425',这是一个字符类型的值。但是,学号应该是一个数字类型的值。因此,我们应该将学号赋值为数字类型的值,而不是字符类型的值。另外,学号的长度超过了long long类型的最大值,因此需要使用更大的数据类型来存储学号。
综上所述,优化后的代码如下:
```C++
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
class student {
private:
string name;
const char* uni;
string department;
string major;
int age;
long long number;
public:
//static成员
static char* ident;
//不带参数的构造函数
student() : uni("云南大学"), number(20201120425), name("王文言"), department("软件学院"), age(21), major("软件工程专业") {}
};
```
在上面的代码中,我们将成员变量的初始化移动到了构造函数的初始化列表中,并使用了数字类型的学号值来初始化number成员变量。
阅读全文