2017-09-22 3 views
0

이 클래스 인스턴스 내에 저장된 정보를 처리하기 위해 자동으로 호출되는 함수가있는 클래스를 만들고 싶습니다.클래스의 인스턴스에서 멤버 함수를 오버로드하는 방법

그러나 각 인스턴스에는 다른 값이있을 수 있으며 해당 컨텐트가 다른 방법으로 전달 될 수 있습니다.

따라서 생성자 오버로드와 비슷하지만 멤버 함수에서 simmilar가 필요합니다. 모든 인스턴스가 기본 함수를 오버로드하거나 입력을 처리하기 위해 기본값을 그대로 둘 수 있습니다.

어떻게 달성 될 수 있습니까?

+2

해당 함수를 매개 변수로 생성자에 전달할 수 없습니까? 구조 :: 기능에 std :: function! – Bathsheba

+0

@ Bathsheba 매개 변수로 전달하지 않아도됩니다. – MoustacheSpy

+1

나는 그렇지 않다는 것을 알고 있습니다. 그러나 당신은 * 할 수 있습니다. – Bathsheba

답변

0

가변 동작에 대해 별도의 클래스를 생성하여 함수와 관련된 로컬 데이터를 설명하고 클래스가 됨으로써 파생 될 수 있습니다. 함수 연산자 void operator()(......)를 사용

class Callable { 
public: 
    int m_Value; 
    Callable(int value) : m_Value(value) 
    { 

    } 
    void operator()(int val1, double val2 /* whatever makes sense */) { 

    } 
}; 

우리는 함수처럼 보이는 유형의 변수는 호출 가능하게하는 방법을 만들 수 있습니다.

class Variable { 
public: 
    Callable myFunction; 
    Variable(const Callable & howToCall, /* some more stuff */) : 
     myFunction(howToCall) 
    { /* stuff */ 
    } 
    void aFunction(int data, double value) { 
     myFunction(data, value); 
    } 
}; 

aFunction를 호출 myFunction의 현재 값이 호출됩니다.

마지막으로 Variable

myFunction = Callable(/* new parameters */); 
0

시도와 함께 생성자에서 함수를 호출하는 ....하여 myFunction의 값을 수정하여,이 함수 호출하는 변경할 수 있습니다 경우 다른 조건 같은 :

class abc{ 
abc(){ 
     if username == "member 1" 
      functioncall(); 
     else 
      functioncall(); 
} 

}

0

가상 구성 에뮬레이션이 필요하다는 것을 알기까지. 간단한 C/C++ 방법이 있습니다.

// Example program 
#include <iostream> 
#include <string> 

struct A; 
typedef void (*cb)(A*); 


struct A 
{ 
    int m_a; 

    static void foo(A* aref) 
    { 
     std::cout << "Print a: " << aref->m_a << "\n"; 
    } 


    A(cb b=foo) 
    { 
     m_a = 100; 
     b(this); 
    } 
}; 

int main() 
{ 
    A a; 

} 

아직 명확하지 않지만 여전히 트릭을 수행합니다.

관련 문제