如何在方法中传递结构参数
How do you pass struct parameters in a method
我没有找到我问题的答案,我对 OOP 很陌生,所以请怜悯我。 好的,所以我有以下代码:
class Group
{
public:
struct Student
{
char name[40],
int grades[5]};
}
Student s[10];
.....
private: double med(???)
{
.....
}
}
那么???在哪里我想将个别学生的成绩作为参数,并返回他们的平均值。我不知道我应该如何声明它们,我尝试了很多方法,但每次都出错。
很多
所以你有一个带有参数的结构,比如:
struct Student
{
std::string name;
std::array<int, 5> grades;
};
由于这被标记为C++
,我选择使用std::array<int, 5>
而不是int[5]
。
在我看来,Student
不一定在Group
内部,但我想这是基于意见的。
现在,您有一个包含学生的Group
:
struct Group
{
Group(std::vector<Student> students) :
_students{ std::move(students) }
{}
double med(/* ... */) const
{ /* ... */ }
std::vector<Student> _students; // C++ -> use std::vector
};
假设你想传递特定学生的成绩作为函数med
的参数,而不是简单地这样做:
double Group::med(const std::array<int, 5>& grades) const
{ /* sum up grades, divide by 5, and return the result */ }
您将按如下方式调用此函数:
Student paul{"Paul", {1,2,3,4,5}};
Group group({paul});
group.med(paul.grades);
正如评论中所建议的,您可能希望传递学生的姓名而不是他/她的成绩:
double med(const std::string& name)
{
// find student
auto it = std::find_if(_students.begin(), _students.end(), [&name](const Student& student)
{
return student.name == name;
});
// if no student by that name
if (it == _students.end())
return -1.0;
// else
int sum{ 0 };
for (const auto& grade : it->grades)
{
sum += grade;
}
return static_cast<double>(sum)/(it->grades.size());
}
以下是关于好C++书籍的讨论。
Tyr 此代码包含四个 avg(( 函数,它们都相同,但在调用函数的方式上有所不同。
#include<iostream>
#include<string.h>
using namespace std;
class Group
{
public:
struct Student
{
char name[40];
int grades[5];
}student;
double avg()
{
double sum=0;
for(int i=0;i<5;i++)
sum+=student.grades[i];
return (sum/5);
}
};
double avg(int *grade)
{
double sum=0;
for(int i=0;i<5;i++)
sum+=grade[i];
return (sum/5);
}
double avg(Group::Student stduent)
{
double sum=0;
for(int i=0;i<5;i++)
sum+=stduent.grades[i];
return (sum/5);
}
double avg(Group group)
{
double sum=0;
for(int i=0;i<5;i++)
sum+=group.student.grades[i];
return (sum/5);
}
int main()
{
Group group1;
strcpy(group1.student.name,"MyName");
for(int i=0;i<5;i++)
group1.student.grades[i]=5;
cout<<"Name:"<<group1.student.name<<endl;
cout<<"Avg:"<<avg(group1.student.grades)<<" "<<avg(group1.student)<<" "<<avg(group1)<<" "<<group1.avg();
return 0;
}
输出:
Name:MyName
Avg:5 5 5 5
Process returned 0 (0x0) execution time : 0.379 s
Press any key to continue.
您可以保留未命名的结构,例如
struct
{
char name[40];
int grades[5];
}student;
如果从代码中删除函数和函数调用
double avg(Group::Student stduent)
{
double sum=0;
for(int i=0;i<5;i++)
sum+=stduent.grades[i];
return (sum/5);
}
相关文章:
- 使用不带参数的函数访问结构元素
- 将结构字段的类型展开为可变模板参数
- MSVC将仅移动结构参数解释为指针
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 如何传递带有通过引用传递的结构参数的函数?
- 展开可变参数模板结构
- 在类构造函数中定义结构变量的参数
- 如何在方法中传递结构参数
- 我应该在C++中将这些结构用作参数化构造函数吗?
- 在模板方法 c++ 中传递结构参数
- 结构参数在函数调用时损坏
- 如何使用结构参数委托构造函数
- 错误 C2783:无法推断结构参数的模板参数
- 用于存储元组键的数据结构:参数关系列表
- 使用结构参数从程序集中调用C++函数
- 如何为llvm IR调用指令创建结构参数
- c++为函数使用结构参数而不是多个参数
- 导入结构参数
- 将结构参数传递给结构内的函数
- 带有结构参数的pthread不起作用