C++ C+中类对象双向初始化的实现+;
在浏览QtaPI时,我突然注意到一些函数允许用户以两种方式初始化类对象。例如:C++ C+中类对象双向初始化的实现+;,c++,qt,api-design,C++,Qt,Api Design,在浏览QtaPI时,我突然注意到一些函数允许用户以两种方式初始化类对象。例如: QReqExp类: 它可以一次初始化,如下所示: QRegExp regExp("*.wk?", Qt::CaseInsensitive, QRegExp::Wildcard); QRegExp regExp; regExp.setPattern("*.wk?"); regExp.setCaseSensitivity(Qt::CaseInsensitive); regExp.setPatternSyntax(QRe
QReqExp类:
它可以一次初始化,如下所示:
QRegExp regExp("*.wk?", Qt::CaseInsensitive, QRegExp::Wildcard);
QRegExp regExp;
regExp.setPattern("*.wk?");
regExp.setCaseSensitivity(Qt::CaseInsensitive);
regExp.setPatternSyntax(QRegExp::Wildcard);
或者可以像这样一步一步地初始化:
QRegExp regExp("*.wk?", Qt::CaseInsensitive, QRegExp::Wildcard);
QRegExp regExp;
regExp.setPattern("*.wk?");
regExp.setCaseSensitivity(Qt::CaseInsensitive);
regExp.setPatternSyntax(QRegExp::Wildcard);
我想知道这个系统是如何实现的??我的意思是,在用户明确设置它们之前,类对象集的属性是否为默认值? ,您需要查看基本C++。 第一条语句
QRegExp regExp(“*.wk?”,Qt::不区分大小写,QRegExp::通配符)代码>使用接受参数并使用给定参数自动初始化类对象成员的。给出了该特定构造函数的文档
与Qt框架中定义的大多数其他类一样,QRegExp
类具有重载构造函数。这结合了构造函数和函数重载的概念
在第二个代码块中,QRegExp regExp
初始化QRegExp
对象而不传递任何参数,它所做的只是为其所有成员分配内存,称为默认构造函数。在本例中调用的构造函数
然后为类中的每个成员调用特定的集合函数并初始化它们的值。请记住,这些函数也可以在第一种方法中调用,以修改已分配的数据,并被用来专门为这些特定成员分配数据。 ,你需要查看基本C++。
QRegExp regExp("*.wk?", Qt::CaseInsensitive, QRegExp::Wildcard);
第一条语句QRegExp regExp(“*.wk?”,Qt::不区分大小写,QRegExp::通配符)代码>使用接受参数并使用给定参数自动初始化类对象成员的。给出了该特定构造函数的文档
与Qt框架中定义的大多数其他类一样,QRegExp
类具有重载构造函数。这结合了构造函数和函数重载的概念
在第二个代码块中,QRegExp regExp
初始化QRegExp
对象而不传递任何参数,它所做的只是为其所有成员分配内存,称为默认构造函数。在本例中调用的构造函数
然后为类中的每个成员调用特定的集合函数并初始化它们的值。请记住,这些函数也可以在第一种方法中调用,以修改已分配的数据,并被用于专门为这些特定成员分配数据
QRegExp regExp("*.wk?", Qt::CaseInsensitive, QRegExp::Wildcard);
使用上面的语句,将使用类构造函数之一创建一个对象,如下所示:-
public:
QRegExp(String param1, SomeType cs, SomeType wildcard)
{
this.param1 = param1;
this.cs = cs;
this.wildcard = wildcard;
}
在第二种情况下,它调用默认构造函数,并使用setter方法设置值
QRegExp regExp;
上述语句将调用默认构造函数,如下所示:-
public:
QRegExp():param1(some value),cs(some value),wildcard(some value)
{
}
类QRegExp还具有以下setter方法:-
public:
void setPattern(String String param1)
{
this.param = param1;
}
regExp.setPattern("*.wk?");// here you are calling the above method
对于setter方法的其余部分,想象一下它们也像上面那样实现
希望这会有所帮助
使用上面的语句,将使用类构造函数之一创建一个对象,如下所示:-
public:
QRegExp(String param1, SomeType cs, SomeType wildcard)
{
this.param1 = param1;
this.cs = cs;
this.wildcard = wildcard;
}
在第二种情况下,它调用默认构造函数,并使用setter方法设置值
QRegExp regExp;
上述语句将调用默认构造函数,如下所示:-
public:
QRegExp():param1(some value),cs(some value),wildcard(some value)
{
}
类QRegExp还具有以下setter方法:-
public:
void setPattern(String String param1)
{
this.param = param1;
}
regExp.setPattern("*.wk?");// here you are calling the above method
对于setter方法的其余部分,想象一下它们也像上面那样实现
希望这会有所帮助方便代码浏览器,可以单击对象到它们的实现并跟踪实现。可以在C++中没有参数和构造函数的构造函数。所以您可以创建不带参数或带参数的对象。在无参数中,您将通过对API的外部调用来设置参数。-方便代码浏览器,您可以单击对象以实现它们的实现并跟踪实现。可以在C++中构造具有不带参数的构造函数的参数和构造函数。所以您可以创建不带参数或带参数的对象。在无参数中,您将通过对API的外部调用来设置参数。