2013-07-06 2 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

Я не понимаю, чего вы хотите. Перефразируйте, это не имеет смысла для меня. as-is –

+0

Почему вы называете класс и метод тем же самым? Это значительно усложняет задачу того, что вы пытаетесь сделать. – user2357112

+0

Я хочу сохранить ИД имени INT в классе, который является переданным массивом индексов. –

ответ

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 –

Смежные вопросы