코드에는 여러 작업 공간이 있으므로 추가 작업을 수행하기 전에 수정해야합니다.
명명 규칙은 끔찍합니다. 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가 사용 된 장소에 클래스 필드 b를 사용합니다. 이러한 세부 정보로 인해 코드 읽기가 어려워집니다. 좀 더 읽기 쉽도록 코드를 포맷했습니다. – Spook
정확히이 코드가 어떤 일을할지 확실하지 않음 * (a + c) = 0; ...이 코드는 의미가 있거나 무작위 임 – anand