有没有一种方法可以在不使用 C++ 中的额外变量的情况下为 setter 传递用户数据?

Is there a way to pass user data for a setter without using an extra variable in C++?

我还是 C++ 的新手,到目前为止,我曾经将静态值传递给 setter 方法。现在我正在尝试将用户数据传递给方法,但到目前为止我只能使用一个额外的变量来做到这一点,如下所示。

Class:

class Square
{
private:
    double length;

public:
    void setLength(double l);
    double getlength();
    double calcArea();
};

在主函数中:

Square s1;
double x;

cout << "Enter length: ";
cin >> x;

s1.setLength(x);

因此,我使用临时变量将用户值传递给 setters。 我的问题是,有没有办法直接将变量传递给 setter?或者有更好的方法吗?

请注意,我是 C++ 的初学者,因此请简单明了。谢谢!!

你可以通过变量设置值,也可以发送一个值,但如果你想直接这样做,就会违反封装法则。我们可以将 class 属性设为私有以确保封装。因此,就此而言,您所做的事情是完美的✌。

应该是设计题。能够直接从流中加载特定属性有意义吗?如果它具有语义值(在业务对象级别有意义)或有助于通过避免代码重复来遵循 DRY(不要重复自己)原则,那么您应该编写一个特定的方法:

class Square {
private:
    double length;
...
public:
    std::istream& loadlength(istream& in) {
        in >> length;
        return in;
    }
...

然后您就可以轻松使用它了:

s1.loadlength(std::cin);
if (! std::cin) {
    // process the error condition
    ....

你可以这样做

#include<iostream>
class Square
{
private:
    double length;

    friend std::istream& operator>>(std::istream&,Square& );
public:
    void setLength(double l);
    double getlength();
    double calcArea();
};
std::istream& operator>>(std::istream& is, Square& s )
{
    is>>s.length;
    return is;
}
int main()
{
   Square  s;
   std::cout<<"Enter length: ";
   std::cin>>s;
}

我认为这不是个好主意,但这很有效:

#include <iostream>
using std::cout;
using std::cin;
class Square
{
private:
    double len;

public:
    double& length() {return len;}
    double length() const {return len;}
};

int main() {
    Square s1;

    cout << "Enter length: ";
    cin >> s1.length();
    cout << "length: " << s1.length();
}