有没有一种方法可以在不使用 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();
}
我还是 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();
}