为啥我的班级不使用我给它的值?

Posted

技术标签:

【中文标题】为啥我的班级不使用我给它的值?【英文标题】:Why isn't my class using the values I've given it?为什么我的班级不使用我给它的值? 【发布时间】:2021-03-08 13:35:47 【问题描述】:

在尝试理解和使用类和方法的过程中,我一直在尝试创建一个具有私有值的类,该类使用一种方法来更改这些值。我创建了一个程序,它请求用户输入(长度和宽度)并从这些值创建一个“矩形”(它只是存储他们输入的值,就好像它是一个矩形一样。)出于某种原因,我使用的方法没有'不要改变类中的私有长度和宽度值。我使用 .h 文件创建类,使用 .cpp 创建获取输入的函数,main.cpp 用于调用该函数。为了简单起见,我删除了 .cpp 文件中代码的输入验证部分,因为它不会影响类值。你能帮我找出我的错误吗?

我的 .h 文件,其中包含类:

#pragma once

#include <iostream>
using namespace std;

class Rectangle

private:
    double length;
    double width;
public:
    Rectangle()
    
        length = 0;
        width = 0;
    
    Rectangle(double a)
    
        length = a;
        width = a;
    
    Rectangle(double l, double w)
    
        length = l;
        width = w;
    
    void SetLenWid(double l, double w)
    
    if (l == w)
    
        Rectangle (l);
        cout << "You have created a square with sides equal to " << length << endl;
    
    else
    
        Rectangle (l, w);
        cout << "You have created a rectangle of length = " << length << " and width = " << width << endl;
    
    
;

Rectangle.cpp 文件:

#include "Rectangle.h"
#include <iostream>



void getInput()

    double l, w;
    cout << "Enter the length: ";
    cin >> l;
    cout << "Enter the width ";
    cin >> w;
    Rectangle init;
    init.SetLenWid(l, w);

最后,我的 main.cpp:

#include "Rectangle.h"
#include "Rectangle.cpp"
#include <iostream>

using namespace std;

int main()

    getInput();
    return 0;

很抱歉这个冗长的问题!

【问题讨论】:

你用过调试器吗? 你想对SetLenWid中的Rectangle (l);Rectangle (l, w);做什么? 你需要的大概是void SetLenWid(double l, double w) length = l; width = w; 【参考方案1】:

Rectangle(l, w); 不会做你认为的那样。它创建一个临时矩形,然后立即销毁。

Rectangle(l); 也不符合您的预期。它等价于Rectangle l;,它使用0 参数构造函数创建一个名为l 的矩形。

你想要*this = Rectangle(l, w);,或者直接分配给字段。

【讨论】:

@0marAbzd 不客气!按左侧的绿色勾号将您的问题标记为已解决。

以上是关于为啥我的班级不使用我给它的值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Scala 编译器会考虑一个类型,而分配给它的值的类型是不同的?

在 Appium Sendkeys 中没有按预期工作,它发送的比我给它的多

为啥我的阵列没有消耗我发送给它的信息?斯威夫特 4

回收器视图应该从提供给它的双数组中创建按钮。回收站视图显示为空。不知道为啥

为啥 shell 忽略通过变量传递给它的参数中的引号字符? [复制]

使用EasyUI开发,用的WEB页面;怎么让前台下拉框显示的值是后台赋给它的?