我有两个班级,Flight
和Runway
。现在我试图将这些对象的数组作为参数传递给函数。
void fun(Flight ptr1[],Runway ptr2[])
{
...
...
}
ptr1应指向Flight对象数组,ptr2应指向Runway对象数组。 现在在这个函数fun()里面如何访问这些类的成员。我也可以使用ptr1 ++或ptr2 ++在对象之间移动?? 我怎么称呼这个函数?这样的事情 -
Flight array1[5];
Runway array2[2];
fun(array1,array2);
答案 0 :(得分:4)
void fun(Flight ptr1[],Runway ptr2[])
被解释为
void fun(Flight *ptr1, Runway *ptr2)
这被称为“分解”,我认为它已经腐烂了。它主要是向后兼容C的功能。如果你想要指针,指定指针,而不是数组,因为指针和数组是不同的东西。
您也可以
void fun(Flight (&arr1)[5], Runway (&arr2)[7])
现在参数仍然是函数内部的数组,而不是指针,因此++ arr1
是非法的,sizeof arr1/sizeof arr1[0]
是5
。调用函数时的参数数组也必须是正确的大小,分别为5和7。在此上下文中,&
表示按引用传递,因此在调用函数时不会复制数组。
您可以利用模板系统为任何大小的参数数组生成函数:
template< size_t NF, size_t NR >
void fun(Flight (&arr1)[NF], Runway (&arr2)[NR])
可以用任意大小的数组调用这样的模板,NF和NR将是设置为适当大小的整数常量。
答案 1 :(得分:1)
ptr1[5].fly();
ptr2[7].run();
答案 2 :(得分:0)
在函数中,它们下拉到指针,因此您可以使用ptr1 ++或++ ptr1和ptr2 ++ / ++ ptr2移动到数组中的下一个项目。
我不确定你的函数如何知道数组中有多少项,因为它无法从代码本身告诉你所以你需要一些“终结器”对象或者将这个大小作为额外参数传递。 / p>
如果你(因为可取)使用了std :: vector,那么你可以将一个引用或const引用传递给你的函数,然后你就可以迭代遍历向量,直到你到达结束迭代器,然后你也可以询问矢量的大小。
答案 3 :(得分:0)
使用ptr1 [i],其中i是一个偏移量,它以指向Flight Class的指针的大小递增。由于数组未在C ++中进行边界检查,因此您的函数必须以某种方式知道数组的大小。另外,远离像ptr ++这样的指针运算,你可能会遇到麻烦。
答案 4 :(得分:0)
在C ++中,参数列表
void fun(Flight ptr1[],Runway ptr2[])
完全等同于
void fun(Flight* ptr1, Runway* ptr2)
你可以使用像数组这样的参数,正如Fred所说:
ptr1[5].fly();
ptr2[7].run();
你也可以使用++和 - 因为它们是指针:
Flight& FirstFlight = *ptr1;
ptr1++;
Flight& SecondFlight = *ptr1;
Flight& ThirdFlight = ptr1[1];
除非将数组作为单独的参数传递,否则无法判断该数组有多长。
答案 5 :(得分:0)
下面是示例程序,我已经定义了Flight类来演示访问Flight类的成员。
#include <stdio.h>
#include <iostream>
#include <new>
using namespace std;
class Flight {
public:
int temp;
int temp1;
Flight();
void print();
};
Flight::Flight() {
temp = 10;
temp1 = 11;
}
void Flight::print() {
printf("%d %d\n", temp, temp1);
}
void fun(Flight ptr1[]) {
//ptr1->print();
ptr1[0].print();
ptr1[1].print();
printf("temp=%d\n",ptr1[0].temp);
printf("sizeof %d \n",sizeof(ptr1));
}
int main() {
Flight array1[5];
Flight *p = new Flight;
//fun(p);
fun(array1);
return 0;
}
你无法在fun函数中获得数组的大小,并且无法在运行时计算sizeof数组,所以你应该在fun函数中添加额外的参数来获取每个数组的大小。
是的,您可以将指针算法应用于Flight / Runway数组。
乐趣(Flight ptr1 [])相当于fun(Flight * ptr1)。
答案 6 :(得分:0)
除非没有别的办法,否则不要使用这样的数组。请改用std::vector
:
void fun( const std::vector<Flight> &flights, const std::vector<Runway> &runways)
{
...
...
}
并调用该函数:
std::vector<Flight> flights(5);
std::vector<Runway> runways(2);
fun(array1,array2);
这种方式好多了。