2011-07-31 4 views
3

멍청한 문제입니다. 클래스 외부C++ : 여러 변수 값에 대한 클래스 내부 함수

void evolveE(Example type_); 

를 다음과 같이 '세포'내가

typedef enum Example 
    { 
     E1=0, 
     E2, 
     E3, 
     E4 
    }; 
    Example inputValueE; 

말을 열거 '예'이라는 클래스 내부 또한 내가 클래스 내부의 기능을 가지고, 나는에 대한 함수를 정의하려고 시도 다음과 같은 몇 가지 유형

void cell::evolveE(Example type_ = E1){****some stuff****;}; 
void cell::evolveE(Example type_ = E2){****some diff stuff****;}; ***etc*** 

나는 이것들을 약간 놀았지만 운이 없었습니다. 문제는 동일한 함수를 다시 정의 할 수 없다는 것입니다. 나는 항상 이것을하는 더 우아한 방법이 있다고 확신하지만 항상 백업 스위치 케이스 유형 명령을 사용하려고했다.

어떤 도움을 많이 주시면 감사하겠습니다.

+0

감사 자 위의 질문에 대답했습니다. 나는 다형성을 사용하기로 결정했다. 어쨌든 내가 시도한 세 가지 대답은 똑같이 잘 작동했다. 각 Ei는 고유하고 각각의 diff 함수를 많이 포함 할 것이기 때문에 다형성은 내가하는 방법이다. –

답변

0

(클래스에 같은 이름을 가진 두 개 이상의 기능을 제공) 함수를 오버로드 할 때 유형이 같은 각 기능에 인수의 다른 세트를 제공해야합니다

void cell::evolveE(Example type_){****some stuff****;} 
void cell::evolveE(OtherExample size_){****some diff stuff****;} 

공지 사항이 여기서 한 함수는 Example 유형의 인수를 취하고 다른 함수는 OtherExample 유형의 인수를 취합니다. 오버로드를 시도하는 함수에 다른 기본값을 제공하더라도 두 함수 모두 유형과 동일한 인수를 사용하므로 컴파일러는이 두 함수의 차이를 알 수 없습니다.

if/else를 선호하지만 스위치를 사용할 수 있습니다. 버그가 적어지기 때문입니다.

Example 열거 형이 실제로 유형 인을 결정하는 경우 다형성을 사용할 수 있습니다. 그것은 OOP의 매우 우아한 기능입니다.이 문장의 경우

class cell 
{ 
    ... 
    virtual void evolveE() = 0; 
}; 

class E1cell : public cell 
{ 
    ... 
    void evolveE() 
    { 
     // some stuff 
    } 
}; 

class E2cell : public cell 
{ 
    ... 
    void evolveE() 
    { 
     // some diff stuff 
    } 
}; 
1

이 구문은 기본 인수를 설정합니다. 호출자가 전달한 실제 매개 변수와 일치하지 않습니다. switch/case을 사용하십시오.

멋지기를 원한다면 함수 포인터의 배열 (또는 맵)을 사용할 수도 있습니다.

1

: 그럼 당신은 이런 식으로 뭔가를 할 수

void cell::evolveE(Example type_ = E1); 

두 지점 : 여기

  1. 당신이 evolveE의 매개 변수 및 하지에 대한 기본 값을 설정하는 형식을 사용하도록 설정합니다. enum
  2. y 종류; 기능 은 다른 유형 및 매개 변수 솔루션의

하나의 번호로 오버로드 할 수 있습니다

당신은 모든 값을 독립적 인 형태하게 선택하여 사용할 수 있습니다

: 모든 사람에게

enum E1 {}; 
enum E2 {}; 
enum E3 {}; 
관련 문제