我的作业有问题。
1)我应该用输入a,b和c编写函数SSS。我需要输出alpha,beta和gamma。
2)我应该用输入a,b和gamma编写函数SWS。而且我需要输出c,alpha和beta。
这是我的代码:
@media (max-width: 991px) {
.navbar-brand{
position: absolute;
margin-left: 68px;
}
}
我只能在一个函数中返回一个参数。对于任务1,我有很多功能:alpha,beta,gamma。而且我不知道如何在一个函数中编写它。我只写了一个函数来查找任务2的c。
我是C ++的新手。如果您能帮助我,我会很高兴。:)
答案 0 :(得分:2)
首先,如果包含cstdio
,则不需要iostream
,而您最好在C ++中这样做,因为cstdio
只是迁移到C ++的C库。
对于您的问题,听起来好像您需要按值传递变量。您最喜欢的C ++书籍应该告诉您,在像您这样的情况下,您需要“返回”多个值。在这种情况下,您可以将指针(C样式)或更安全的引用传递给类似于指针的函数。
因此,您实际上将如下定义函数:
void SSS(double a, double b, double c, double & alpha, double & beta, double & gamma);
或者如@ Ripi2所述,将值包装在struct
中并返回该类型的值:
/* Thanks to NathanOliver in the comments */
struct Values {
double a;
double b;
double c;
};
Values SSS(double a, double b, double c) {
Values values;
/* Do stuff */
return values;
}
答案 1 :(得分:2)
返回结构或使用提议的Triangle类是完美的解决方案,这是我通常使用的方法。
但是,在某些简单情况下,通过一个元组返回多个值会非常方便。
我在下面展示了一个简单的“工作”示例。
请注意,我通常会针对超过3个返回对象避免这种解决方案,以免造成混淆。
#include <iostream>
#include <tuple>
std::tuple<double, double, double> f(double x, double y){
double a = x;
double b = x+y;
double c = x-y;
return std::make_tuple(a, b, c);
}
int main() {
double a, b, c;
std::tie (a, b, c) = f (1.0, 2.0);
std::cout << "a = " << a << "\n";
std::cout << "b = " << b << "\n";
std::cout << "c = " << c << "\n";
return 0;
}
我希望代码能自我解释。
可以使用C ++ 17简化语法。我没有使用这些简化,因为我当前的编译器不兼容!
这种方法可以与结构一结合使用,因为可以通过一个元组返回多个结构。
编辑:我只是看到NathanOliver已经在评论中提到了元组的可能性...
答案 2 :(得分:1)
struct
将是您要做的最简单的方法。您也可以创建一个类,但这可能是作业的一种过分解决方案(它们基本上是相同的,但请参阅我的评论主题以了解该问题)。
结构声明如下:
struct containerName
{
int val_a;
double val_b;
//and so on : you put what ever you need
}
然后该结构基本上成为一种类型,可以像int
,double
,bool
等那样使用。
Here's a nice reading在struct
上以及如何使用
答案 3 :(得分:1)
是的,您只能从函数中返回一个对象。但是您可以让它返回一个复合对象,例如结构或类。传统上,您仅将结构体用于数据对象,因为这就是它们在C语言中的作用。
struct Triangle
{
double a;
double b;
double c;
};
然后,您可以从函数中返回Triangle
对象。并以这种方式访问其成员:
Triangle tri1; // first, create an instance of the struct
tri1.a = 5.0f; // assign a value to a member
优良作法是为数据类型选择有意义的名称(就像使用变量一样),并始终设计数据类型以使其代表名称。
为使代码更具表达力,您可以采用面向对象的方法进一步完善代码。您可以给数据类型Triangle
成员函数计算其角度,以便可以“询问” Triangle
的角度是什么。
(这时您也应该将其命名为类,因为它不再是纯数据结构,但这是一个约定。在C ++中,结构和类几乎相同。)
class Triangle
{
public:
// everything in this section can be accessed from outside
// this is a constructor. It is a special function that lets you create a Triangle
Triangle(double pa, double pb, double pc)
: a(pa), b(pb), c(pc) // initialize the members
{}
// getters for the private members (not needed but that way they can't directly be changed)
double get_a() const
{
return a;
}
double get_b() const
{
return b;
}
double get_c() const
{
return c;
}
double alpha() const;
double beta() const;
double gamma() const;
// should be const because they dont change anything about the object
private:
// the default access for classes, everything in this section can only be accessed by member functions
double a;
double b;
double c;
};
// member function definitions outside of class declaration
double Triangle::alpha() const
{
// calculate and return alpha...
}
double Triangle::beta() const
{
// calculate and return beta...
}
double Triangle::gamma() const
{
// ...
}
您可以通过以下方式使用此类:
int main()
{
// create a Triangle by calling the constructor
Triangle tri1(5.0, 7.0, 8.0);
std::cout << "Alpha: " << tri1.alpha() << std::endl;
std::cout << "Beta: " << tri1.beta() << std::endl;
std::cout << "Gamma: " << tri1.gamma() << std::endl;
return 0;
};