注册 登录
编程论坛 C++教室

构造函数调用问题,求教。

wolfcan 发布于 2021-12-28 16:50, 2106 次点击
我有如下疑问请教各位,谢谢。
定义类cam如下
程序代码:

class cam
{
   
    int m_x;
    float m_y;
    cam getcam(int a,float b)
        {
            return cam{a,b};
         }
}

int main()
{
    int a=1;
    float b=2;
    cam c1;
    int c=c1.getcam(a,b).m_x;
}

如果运行面代码,程序不报错,其中成员函数getcam()中 return cam{a,b}可调用构造函数完成对象构造。
但如果自己定义了无参默认构造函数却会报错。会提示缺乏与之对应的有参构造函数。
我想了解,如果自己不生命和定义构造函数的话,上面代码调用的是什么构造函数,是默认构造函数吗?为什么其可以接受两个参数呢?谢谢
5 回复
#2
rjsp2021-12-28 19:29
你这代码中有多处语法错误,不可能不报错。
你先把代码改正确,确保自己能够编译成功,再贴出来,否则别人猜不出你想问的是哪个错误。
#3
wolfcan2021-12-28 20:25
回复 2楼 rjsp
谢谢提醒
#4
wolfcan2021-12-28 20:26
回复 楼主 wolfcan
帖子代码修改如下,问题如上
程序代码:

#include <iostream>
#include <string>
using namespace std;
class cam
{
public:
    int m_x;
    float m_y;
    cam getcam(int a, float b)
    {
        return cam{a,b};
    }
};
int main()
{   
    int a = 1;
    float b = 2;
    cam c1;
    int c = c1.getcam(a, b).m_x;
    cout << c << endl;
}


[此贴子已经被作者于2021-12-28 20:27编辑过]

#5
rjsp2021-12-28 20:38
你这个调用的不是构造函数,而是 聚合初始化。
如果你定义了构造函数,那它就不是一个聚合类了,怎么可能有 聚合初始化 ?
#6
wolfcan2021-12-30 17:13
回复 5楼 rjsp
谢谢根据你的提示,又学到了什么叫聚合体,非常感谢
1