gpt4 book ai didi

c++ - C++继承中的构造函数重载问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:58:29 25 4
gpt4 key购买 nike

这是我的代码片段:

class Request
{
public:
Request(void);
………..
}

Request::Request(void)
{
qDebug()<<"Request: "<<"Hello World";
}


class LoginRequest :public Request
{
public:
LoginRequest(void);
LoginRequest(QDomDocument);
……………
}

LoginRequest::LoginRequest(void)
{
qDebug()<<"LoginRequest: "<<"Hello World";
requestType=LOGIN;
requestId=-1;
}

LoginRequest::LoginRequest(QDomDocument doc){
qDebug()<<"LoginRequest: "<<"Hello World with QDomDocument";
LoginRequest::LoginRequest();
xmlDoc_=doc;
}

当调用Overrided LoginRequest的构造函数时

LoginRequest *test=new LoginRequest(doc);

我想出了这个结果:

Request:  Hello World
LoginRequest: Hello World with QDomDocument
Request: Hello World
LoginRequest: Hello World

显然 LoginRequest 的构造函数都调用了 REquest 构造函数。

有什么办法可以应对这种情况吗?

我可以构造另一个函数来完成我想做的工作,并让两个构造函数都调用该函数。但是请问有什么解决办法吗?

编辑: http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.3

最佳答案

代码没有按照您可能认为的那样做。线路:

 LoginRequest::LoginRequest();     

构造一个立即销毁的临时对象。正如其他人所建议的那样,您可以将重复代码放在私有(private)函数中,但这有很多问题 - 具体来说,这样的函数只能执行赋值,不能初始化,而且很多类不支持赋值。一个更好的解决方案是使用默认参数实现单个构造函数:

class LoginRequest {
....
LoginRequest( QDomDocument d = DefaultDoc() );
};

关于c++ - C++继承中的构造函数重载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3022356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com