C++ 中关于默认构造函数的一点困惑
来源:互联网 发布:网络功放系统 编辑:程序博客网 时间:2024/05/05 05:33
一:默认构造函数(default constructor)的定义
就是在没有显式提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有的形参提供默认实参的构造函数定义。如果定义某个类的变量时没有提供初始化时就会使用默认构造函数。(摘自百度百科)
由以上定义可得默认构造函数分两种:1,不带参的构造函数。2,所有形参提供默认实参的构造函数。
二:问题
如果一个类中上述两种构造函数共存,那么哪一个是默认构造函数呢?
如下面的代码块
#include <iostream>using namespace std;class A{private: int a;public: A(){cout<<"First"<<endl;} A(int ta=1){a=ta;cout<<"Second:a="<<a<<endl;}};int main(){// A a1;//compile failure A a2(); A a3(10); return 0;}
在类A中有两个显示的构造函数,A()和A(int ta = 1)。按照定义,两个都是默认构造函数。
在main函数中。我实例化对象a1,a2,a3。
先PO结果
result:
Second:a=10
实例化a1:编译出错。理由是:error: call of overloaded 'A()' is ambiguous|(重载的A()调用模糊);
实例化a2:编译正确。调用隐士的构造函数(即非上述两个构造函数),没有任何输出。
实例化a3:编译正确。调用A(int ta = 1),输出“Second:a=10”
问题1:实例化a2可以调用A(),A(int ta = 1)两个显示的构造函数,为什么调用隐式构造函数呢?
问题2:实例化a1时编译器的error提示什么意思?模糊指的是哪几个构造函数模糊?为什么这种模糊不会在实例化a2的时候出现呢?
以上问题,百思不得解。还请前辈不吝指导。
0 0
- C++ 中关于默认构造函数的一点困惑
- 关于默认构造函数的一点总结
- 关于C语言中open和fopen的一点困惑
- C++默认构造函数的一点说明
- 关于c++默认的构造函数、析构函数、拷贝构造函数、move函数
- 关于构造函数的默认构造
- 关于recv的一点困惑
- 关于”类‘customer’中不存在默认构造函数“的问题
- 关于默认构造函数的一点琢磨--全局变量和局部变量
- 关于父类构造函数调用子类成员的困惑
- 一点关于复制构造函数的问题
- 关于默认构造函数
- 关于默认构造函数
- C++中关于默认构造函数和默认参数…
- 关于默认构造函数的说明
- 关于默认构造函数的尝试
- 关于C++合成的默认构造函数
- 关于C语言中free函数的一点思考
- 解决低版本ie中文乱码 urlencode urldecode
- 关于reverse_iterator
- Window7系统64位下安装Oracle 10g出错解决办法
- Android--view自定义--圆环等待
- Lua面向对象编程
- C++ 中关于默认构造函数的一点困惑
- Xshell连接虚拟机时,提示SSH服务器拒绝了密码
- hibernate
- 《——————————搭建自己的网站————————————》
- 如何系统学习大数据(转自知乎)
- C++中的小错误
- Css基本样式(二)
- layoutSubviews何时调用的问题
- 算法导论 练习 2.3-5