У вас есть много мест в вашем коде, которые должны быть исправлены до любых дальнейших операций.
Именование конвенции ужасно. Что такое a
, b
, c
?
Вы используете b
в качестве индексатора циклов, тогда как вместо него следует использовать локальную переменную.
Вы не показываете нам, что являетсяa
. Где это распределено? Каков размер памяти, на который указывает a
?
Я думаю, что ваш код должен выглядеть следующим образом:
class InitLine
{
private:
char * data;
int count;
public:
InitLine(char * newData, int newCount)
{
// Possible error checking?
data = newData;
count = newCount;
}
// No parameters needed here, I guess
void Init()
{
for (int i = 0; i < count; i++)
data[i] = 0;
}
};
Что касается вашего вопроса, то я не совсем уверен, что вы пытаетесь достичь, и что вы хотите знать. Если вы хотите, чтобы написать общий класс проведения любого типа массивов, вы должны использовать шаблоны:
template <typename T>
class InitLine
{
private:
T * data;
int count;
public:
InitLine(T * newData, int newCount)
{
// Possible error checking?
data = newData;
count = newCount;
}
// No parameters needed here, I guess
void Init()
{
for (int i = 0; i < count; i++)
data[i] = 0;
}
};
Вы должны использовать этот класс следующим образом:
InitLine<char> line(myData, myDataSize);
// where myData is a char * and myDataSize is an int
Если вы хотите написать несколько методов, отличающихся по своим параметрам, этот метод называется метод перегрузки и доступен в C++:
void Init(char * a, int b) { /* sth */ }
void Init(int * a, int b) { /* sth */ }
Обратите внимание, что компилятор должен уметь четко различать, какой метод должен быть называется. Например.
void Test(int a) { }
void Test(char a) { }
Test(0); // Ambiguity: which method should be called?
Это только вещи, которые приходят мне на ум, читая ваш вопрос. Если это не то, о чем вы просите, подумайте над тем, чтобы вопрос был более конкретным.
такое же действие с различными параметрами пахнет как перегрузки и шаблоны .. вы можете это сделать. –
Перед ответом: ваше соглашение об именах ужасно. Что такое 'a',' b', 'c'? Затем вы используете поле класса b в месте, где должна была использоваться локальная переменная. Эти детали делают чтение вашего кода очень жестким. Я отформатировал ваш код, чтобы быть более читаемым. – Spook
не уверен, что именно будет делать этот код * (a + c) = 0; ... имеет ли этот код какой-то смысл или просто случайно – anand