代码之家  ›  专栏  ›  技术社区  ›  ayush

对象数组,c++

  •  0
  • ayush  · 技术社区  · 14 年前

    我有两门课 Flight Runway . 现在我试图将这些对象的数组作为参数传递给函数。

    void fun(Flight ptr1[],Runway ptr2[])
    {
    ...
    ...
    }
    

    现在在函数fun()中,我如何访问这些类的成员。我还可以使用ptr1++或ptr2++在对象之间移动吗?? 我怎么称呼这个函数??像这样的东西-

    Flight array1[5];
    Runway array2[2];
    fun(array1,array2);
    
    7 回复  |  直到 14 年前
        1
  •  4
  •   Potatoswatter    14 年前
    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将是设置为适当大小的整数常量。

        2
  •  1
  •   fredoverflow    14 年前
    ptr1[5].fly();
    ptr2[7].run();
    
        3
  •  0
  •   CashCow    14 年前

    我不确定您的函数将如何知道数组中有多少项,因为它无法从代码本身区分,所以您需要一些“终结符”对象或将大小作为额外参数传递。

        4
  •  0
  •   gtrak    14 年前

    使用ptr1[i],其中i是指向Flight类的指针的偏移量,其增量为sizeo。由于C++中没有检查数组,所以您的函数必须知道数组的大小。另外,不要做像ptr++这样的指针运算,那样会有麻烦的。

        5
  •  0
  •   Qwertie    14 年前

    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];
    

    除非将数组作为单独的参数传递,否则无法判断数组的长度。

        6
  •  0
  •   Dhiraj    14 年前

    #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函数中无法获取数组的大小,并且无法在运行时计算size of数组,因此应该在fun函数中添加额外的参数来获取每个数组的sizeof。

    fun(航班ptr1[])等同于fun(航班*ptr1)。

        7
  •  0
  •   rubenvb    14 年前

    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);
    

    这样好多了。