C++重载的构造函数不能互相调用
2018-06-17 21:11:31来源:未知 阅读 ()
java类里的重载构造函数可以互相调用,如下代码:
1 public class TestConstructor { 2 private int value; 3 4 public TestConstructor(int value) { 5 this.value = value; 6 System.out.println("constructor1:"+this); 7 } 8 9 public TestConstructor() { 10 this(10); 11 System.out.println("constructor2:"+this); 12 } 13 14 public static void main(String[] args) { 15 TestConstructor test = new TestConstructor(); 16 System.out.println(test.value); 17 System.out.println(test); 18 } 19 }
代码执行结果是:
constructor1:TestConstructor@74a14482
constructor2:TestConstructor@74a14482
10
TestConstructor@74a14482
可见结果是预期的,对value赋值是成功的,且只创建了一个对象。
来看一下C++实现(头文件省略):
1 #include "testconstructor.h" 2 #include <QDebug> 3 4 TestConstructor::TestConstructor() 5 { 6 // this(10); 7 TestConstructor(10); 8 qDebug()<<"constructor1:"<<this; 9 } 10 11 TestConstructor::TestConstructor(int value) 12 { 13 this->value = value; 14 qDebug()<<"constructor2:"<<this; 15 }
1 #include "testconstructor.h" 2 #include <QDebug> 3 4 int main(int argc, char *argv[]) 5 { 6 TestConstructor *t = new TestConstructor(); 7 qDebug()<<t->value; 8 qDebug()<<t; 9 delete t; 10 }
代码执行结果是:
constructor2: 0x22fcf0
constructor1: 0xdadfb0
15574896
0xdadfb0
一方面,对value设置的值没有生效,另一方面,两个构造函数创建了两个不同的对象,说明C++不能像java那样构造函数之间互相调用。
解决方法:
大多数构造函数互相调用的需求应该是有默认参数,在C++的函数声明中可以直接设置默认传参(java不支持默认参数),这样就不需要构造函数重载了:
TestConstructor(int value = 10);
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 转换函数搭配友元函数 2020-06-10
- C++ 自动转换和强制类型转换(用户自定义类类型) 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ 运算符重载 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash