2013-07-06 87 views
0

反正我可以通過類如下面的類傳遞參數。C++通過一個數組索引來傳遞參數/

class cat 
{public: 
    void dog(int ID, char *value) // int ID I'd like to be the index array it was called from? 
    { 
    debug(ID, value); 
    } 
} 

cat cats[18]; 

cats[1].dog("value second arg, first arg auto filled from index array"); 
+2

我不明白你想要什麼。換句話說,這對我來說沒有意義。原樣 – 2013-07-06 06:01:35

+0

你爲什麼將類和方法命名爲相同的東西?這使得很難告訴你想要做什麼。 – user2357112

+0

我想在傳遞索引數組的類中存儲一個INT命名ID。 –

回答

1

我測試了這一點,效果不錯:

#include <vector> 

// Forward declaration of the class 
class CatArray; 

class Cat { 
    // This line means that the CatArray class can 
    // access the private members of this class. 
    friend class CatArray; 

    private: 
     static int ID; 

    public: 
     void dog(const char* value) { 
      // Use ID here any way you want. 
     } 
}; 

// Static variables need to be defined. 
int Cat::ID = 0; 

class CatArray { 
    private: 
     std::vector<Cat> cats; 

    public: 
     // explicit means that the argument passed to this constructor must 
     // be an unsigned int. The ": cats(size)" part is an initializer 
     // list that initializes the cats vector so that it would have the 
     // specified size. 
     explicit CatArray(unsigned int size) : cats(size) {} 

     Cat& operator [](unsigned int index) { 
      Cat::ID = index; 
      return cats[index]; 
     } 
}; 

現在這樣使用它:

CatArray cats(18); 

cats[1].dog("oh lol hi"); 

此方法適用於任何數量的你想申報陣列。

1

可以使用靜態變量,並增加它在構造函數中,保持所有intances的軌道:

#include<iostream> 


class cat 
{ 
    int ID; 
    static int IDTracker; 
public: 
    cat(); 
    void dog(char* value); 
}; 

int cat::IDTracker = 0; 
cat::cat() 
{ 
    this->ID = cat::IDTracker; 
    cat::IDTracker++; 
} 
void cat::dog(char *value) 
{ 
    std::cout << value << this->ID; 
} 


int main() 
{ 
    cat cats[18]; 
    cats[1].dog("Second instance, with index value: "); 
    cats[2].dog("Third instance, with index vlaue: "); 

    return 0; 
} 
+0

你沒有新的貓構造函數沒有被調用... – ojblass

+0

我真的不知道這是如何工作,但我知道是非法的定義在類的int值是非法的。 –

+0

我認爲它會工作......靜態成員變量已被支持很長一段時間... – ojblass

0

我不能完全肯定這會工作,但它的一些變種可能...

#include <stdio.h> 
#include <stdlib.h> 

void *foo; 

class cat 
{ 
    public: 

    void dog(char *value) // int ID I'd like to be the index array it was called from? 
    { 
    int ID = (this - ((cat *)foo))/(sizeof(cat)); 
    printf("%d - %s",ID, value); 
    } 

}; 


int main (void) 
{ 
    cat cats[18]; 
    foo = &(cats); 
    cats[1].dog("Fido"); 
} 
+0

我會在一瞬間嘗試,如果它生病會很開心。我明白你明白我的問題。 –

+0

不幸的是。 –

+0

試一下沒有sizeof –