gpt4 book ai didi

c++ - 我可以在 C++ 中的参数化构造函数中初始化一个值吗

转载 作者:太空宇宙 更新时间:2023-11-04 16:08:36 24 4
gpt4 key购买 nike

我的这个程序出错了。我无法理解原因。请详细说明

#include<iostream>
using namespace std;

class room
{
int length;
int width;

public:
room()
{
length=0;
width=0;
}
room(int value=8)
{
length=width=8;
}
void display()
{
cout<<length<<' '<<width;
}
};

main()
{
room objroom1;
objroom1.display();
}

错误是重载函数 room() 的调用不明确。

最佳答案

在这个声明中调用构造函数

room objroom1;

确实有歧义,因为您的类有两个默认构造函数

根据 C++ 标准(12.1 构造函数)

4 A default constructor for a class X is a constructor of class X that can be called without an argument.

所以这个构造函数

room()
{
length=0;
width=0;
}

是默认构造函数。而这个构造函数

room(int value=8)
{
length=width=8;
}

也是默认构造函数,因为它可以在没有参数的情况下调用。

此外,还有一个逻辑上的不一致,因为当调用第一个构造函数时,数据成员 lengthwidth 被初始化为零,而当调用第二个构造函数时没有参数数据成员由8初始化。

而且第二个构造函数甚至不使用它的参数!:)

简单的定义第二个构造函数如下

room( int value )
{
length = width = value;
}

最好将数据成员声明为无符号整数类型。例如

unsigned int length;
unsigned int width;

此外,如果函数显示具有限定符 const 则更好。例如

void display() const
{
cout<<length<<' '<<width;
}

因为它不会改变类数据成员。

关于c++ - 我可以在 C++ 中的参数化构造函数中初始化一个值吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31402151/

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