C++类成员输出值始终为0而非实际输入值问题求助(附代码)
问题分析与修复:矩形类构造函数赋值错误导致输出为0
嘿,别慌!离考试还有两天,这个问题其实很好解决——你的代码里构造函数的赋值顺序完全搞反了,这才导致输出一直是0。
问题根源
你看构造函数里的这段代码:
rectangle(int a, int b) { a=length; b=width; }
这里你是把类成员length和width的默认初始值(int类型默认是0)赋值给了参数a和b,而不是把用户传入的a、b值赋值给类的成员变量。相当于你完全没把用户输入的长和宽存到类里,所以调用getl()和getw()时,返回的始终是成员变量的默认0值。
修复后的代码
只需要把构造函数里的赋值顺序反过来就行:
#include <iostream> using namespace std; class rectangle { int width; int length; public: rectangle(int a, int b) { // 修正赋值顺序:把参数值赋给类成员 length = a; width = b; } int getl() { return length; } int getw() { return width; } }; int main() { int l,w; cout<<"enter the length of the rectangle: "; cin>>l; cout<<"enter the width of the rectangle: "; cin>>w; rectangle one(l,w); cout<<"length: "<<one.getl()<<endl; cout<<"width: "<<one.getw()<<endl; return 0; }
额外小建议(适合考试加分)
C++里构造函数更规范的写法是用初始化列表,这样效率更高,代码也更清晰,考试写出来会显得更专业:
rectangle(int a, int b) : length(a), width(b) {}
直接在初始化列表里给成员变量赋值,避免了先默认初始化再赋值的步骤,逻辑也更直观。
现在运行代码,就能正确输出你输入的长和宽啦,祝你考试顺利!
内容的提问来源于stack exchange,提问作者Fai Zan
相关产品推荐
相关产品推荐

