我有一个类,将object.name定义为“ Ben”,而object.favNum定义为25。
我也有一个数组(名称)来存储5个此类的对象。
在输出数组中对象的属性之前,请使用指针符号将名称[0] .name的值更改为“ Jim”,将名称[0] .favNum的值更改为40。
这是我的代码:
#include<iostream>
class Person {
public:
std::string name = "Ben";
int favNum = 25;
};
int main()
{
Person names[5];
Person *ptr = &names[0];
// Changing Values
(ptr + 0)->name = "Jim";
(ptr + 0)->favNum = 40;
for (int i = 0; i < 5; i++)
{
std::cout << (std::string) (ptr + i)->name << std::endl;
std::cout << (int) (ptr + i)->favNum << std::endl << std::endl;
}
system("pause>0");
}
输出:
Jim
40
Ben
25
Ben
25
Ben
25
Ben
25
在有“更改值”注释的地方,我想用一个函数替换这两行。 该函数将能够像我对两行所做的那样更改值。 这是我遇到的问题。
我正在努力弄清楚将函数声明为哪种类型,如何传递指针,如何接收指针以及如何更改函数数组中对象的值。
答案 0 :(得分:0)
除非您确实需要指针,否则我建议不要使用指针。
// use references instead
void change(Person &person) {
person.name = "Jim";
person.favNum = 40;
};
int main()
{
Person names[5];
change(names[0]);
// ...
}
编写此类函数的适当方法是使用引用。引用类似于指针,但绝对不能为nullptr
。就您而言,您不需要可为空性,只需要编辑Person
而不复制它即可。
您可能希望change()
参数化:
// use references instead
void change(Person &person, std::string name, int favNum) {
person.name = std::move(name);
person.favNum = favNum;
}
但是现在您正在使用此功能分配Person
的所有成员,这使其毫无意义。如果您分配了Person
,将会更简单。为什么不使用struct
和聚合初始化:
struct Person {
std::string name = "Ben";
int favNum = 25;
};
int main()
{
Person names[5];
names[0] = {"Jim", 40};
// ...
}
顺便说一句,您在这里所做的事情没有必要很复杂:
(ptr + 0)->name = "Jim";
// this is equivalent to
ptr[0].name = "Jim";
// this is equivalent to
ptr->name = "Jim";
答案 1 :(得分:0)
这是您的代码在“ real” c ++中的外观(值的设置将在构造函数中或使用setNameAndFavNum()
函数进行):
#include <array>
#include <iostream>
struct Person {
public:
Person(const std::string& name_ = "Ben", int favNum_ = 25) : name(name_), favNum(favNum_) {};
void setNameAndFavNum(const std::string& name_, int favNum_) {
name = name_;
favNum = favNum_;
};
std::string name;
int favNum;
};
int main() {
std::array<Person, 5> names;
// Changing Values
names[0].setNameAndFavNum("Jim", 40);
// Alternatively you can use the constructor and implicit copy constructor
// names[0] = {"Jim", 40};
for (int i = 0; i < names.size(); i++) {
std::cout << names[i].name << std::endl;
std::cout << names[i].favNum << std::endl << std::endl;
}
}
在编写c ++代码时,您不应弄乱指针和原始值。