构造函数里面能定义字符串吗
时间: 2023-07-25 17:20:49 浏览: 41
在很多编程语言中,构造函数是用来初始化对象的,可以在构造函数中定义字符串。在 C++ 中,可以使用构造函数来初始化类中的字符串成员变量,例如:
```c++
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
Person(const char* name) {
m_name = name;
}
void sayHello() {
cout << "Hello, my name is " << m_name << endl;
}
private:
string m_name;
};
int main() {
Person p("Tom");
p.sayHello();
return 0;
}
```
在上面的例子中,Person 类的构造函数接收一个 const char* 类型的参数 name,用来初始化字符串成员变量 m_name。在构造函数中,我们直接将 name 赋值给 m_name,这样就可以初始化字符串了。
需要注意的是,如果要在构造函数中定义字符串,需要使用字符串类型(如 std::string)或者字符数组(如 const char*),不能直接使用字符型变量。
相关问题
在qt中使用正则表达式取出一字符串中括号里面的子字符串
假设我们要从一个字符串中取出括号里面的子字符串,可以使用正则表达式和QRegExp类来实现。具体步骤如下:
1. 定义正则表达式
首先,我们需要定义一个正则表达式来匹配括号里面的内容。在本例中,我们可以使用`\([^)]*\)`这个正则表达式来匹配一个以左括号开始、右括号结束的子字符串。其中,`\(`和`\)`表示匹配左右括号,`[^)]*`表示匹配任意数量的非右括号字符。
2. 创建QRegExp对象
接着,我们需要创建一个QRegExp对象,并将上面定义的正则表达式传入构造函数中:
```C++
QString str = "Hello (world)!";
QRegExp rx("\\([^)]*\\)");
```
在上面的代码中,我们将定义的正则表达式作为参数传给了QRegExp的构造函数。
3. 进行匹配
现在,我们可以使用QRegExp对象进行匹配了。可以使用`indexIn()`函数来查找第一个匹配项的位置,然后使用`capturedTexts()`函数来获取所有匹配项的子字符串列表:
```C++
if (rx.indexIn(str) != -1) {
QStringList matches = rx.capturedTexts();
qDebug() << matches;
}
```
在上面的代码中,`indexIn()`函数返回的是第一个匹配项的位置。如果找到了匹配项,则返回其位置;否则返回-1。如果找到了匹配项,则可以使用`capturedTexts()`函数来获取所有匹配项的子字符串列表。其中,第一个元素是整个匹配项的子字符串,后面的元素是每个括号内的子字符串。
完整的代码如下:
```C++
QString str = "Hello (world)!";
QRegExp rx("\\([^)]*\\)");
if (rx.indexIn(str) != -1) {
QStringList matches = rx.capturedTexts();
qDebug() << matches;
}
```
输出结果为:
```
("(world)", "world")
```
其中,第一个元素是整个匹配项的子字符串`"(world)"`,第二个元素是括号内的子字符串`"world"`。
结构体里面CString需要初始化吗?
在使用CString作为结构体成员时,不需要显式初始化该成员。CString类在创建对象时会自动调用默认的构造函数进行初始化。示例如下:
```cpp
#include <afx.h>
struct MyStruct
{
CString str;
int value;
};
int main()
{
MyStruct myStruct;
myStruct.str = "Hello";
myStruct.value = 10;
// 使用myStruct中的成员
CString str = myStruct.str;
int value = myStruct.value;
return 0;
}
```
在上述代码中,我们定义了一个结构体`MyStruct`,其中包含了一个CString类型的成员`str`和一个整型成员`value`。在`main()`函数中,我们创建了一个`MyStruct`类型的对象`myStruct`,并对其成员进行赋值操作。由于CString类会自动调用构造函数进行初始化,因此我们可以直接给`myStruct.str`赋值一个字符串。
需要注意的是,如果你使用CString类的其他构造函数进行初始化,或者在结构体中使用了其他自定义的构造函数,那么在创建结构体对象时就需要显式地调用对应的构造函数进行初始化。
总之,对于CString类型的成员变量,不需要显式地初始化,它会自动调用默认构造函数进行初始化。