2016-11-03 2 views
2

중복으로 표시하기 전에이 질문을 읽으십시오.
여기 내가 달성하려고하는 것입니다. 기본적으로 나는 초기 값을 포함하는 문자열을 가지고있다.
모듈화를 위해 프로그램을 여러 클래스로 나눴습니다. (더 좋은 방법을 제안 할 수 있습니다 - 현재 각 파일에는 하나의 클래스가 들어 있습니다)
예를 들어 클래스 1로 데이터를 조작하려면 수정 된 문자열은 class2에 의해 조작되어야합니다.

예 : "Hello World」의
두 번째 클래스> - ->"H @ 리터 @ 오 월드 "
thiid 클래스 ->"# @ 리터 @ 오 월드 "
등 초기 항목에"Hello World "
최고 수준이다 on ...

문제와 단점이있을 때 글로벌 변수가 큰 문제가되지 않는 모든 곳을 읽습니다. 따라서 마음에두고 무엇을 가장 좋은 방법이 될 것입니다 나는 클래스간에 원활하게 공유 할 수 있습니다.
나는 또한 각 함수에 대한 포인터로 문자열을 전달할 생각을했지만 거기에 더 나은 대안이있을 거라 생각 했어. 제발 제안 해주세요.
내 que를 읽고 나를 도와 주셔서 들러 주셔서 감사합니다.C++ 클래스에서 사용할 전역 변수를 구현하는 가장 좋은 방법

+0

전역 변수에 문제가 없습니다. 우리가 게으르지 않도록 격려한다고 생각해보십시오. 한 가지 할 수있는 것은 해당 변수를 기본 클래스에서 보호 된 것으로 두는 것입니다. 그런 다음 다른 모든 클래스는 기본 클래스에서 상속됩니다. 그들은 이제 모두 기본 클래스 변수에 액세스 할 수 있습니다. –

+0

나는 생각했다.하지만 각각의 클래스의 개별 객체가 생성 될 때, 그것들이 모두 기본 클래스의 동일한 데이터를 공유하는 것이 가능할 것이라고 생각했다. –

+0

아 물론. 너무 이른 아침에. 죄송합니다. –

답변

1

정확히 을 알지 못하는데 왜을 대답하고 싶습니까? 대답하기가 어렵습니다. 하지만 난 당신처럼 많은 각 클래스에 대한 참조로 string 전달에 어떤 문제가 있는지 표시되지 않습니다 제안 :

class StringModifier1 { 
public: 
    void operator()(std::string& s) { 
    // modify s... 
    } 
}; 
class StringModifier2 { 
public: 
    void operator()(std::string& s) { 
    // modify s... 
    } 
}; 
class StringModifier3 { 
public: 
    void operator()(std::string& s) { 
    // modify s 
    } 
}; 

int main() { 
    std::string myString = "hello world"; 

    StringModifier1 modifier1; 
    StringModifier2 modifier2; 
    StringModifier3 modifier3; 

    modifier1(myString); 
    modifier2(myString); 
    modifier3(myString); 
} 

Live demo.

는 경우에 따라 포인터를 저장하는 클래스를 할 수 있습니다 또는 문자열에 대한 참조 :

class StringModifier1 { 
private: 
std::string& s; 

void func1() { 
    // modify s... 
} 
void func2() { 
    // modify s some more... 
} 
public: 
    StringModifier1(std::string& s) : s(s) {} 

    void execute() { 
     func1(); 
     func2();   
    } 
}; 

int main() { 
    std::string myString = "hello world"; 

    StringModifier1 modifier1(myString); 
    modifier1.execute(); 

    StringModifier2 modifier2(myString); 
    modifier2.execute(); 

    StringModifier3 modifier3(myString); 
    modifier3.execute(); 
} 

Live demo

하나의 클래스가 소유하고 문자열에 대한 액세스를 제공하고 다른 클래스에 소유 클래스에 대한 포인터 또는 참조가 필요할 수 있습니다.

+0

이것은 제가 마지막으로 언급 한 마지막 옵션이었습니다. 다른 좋은 제안이 있습니까? 당신이 que에 대한 나의 마지막 코멘트를 확인하고 그것이 좋은 방법인지 제안 할 수 있습니까? –

+0

@KushanMehta 글쎄, 나는 그것에 대해 잘못된 것을 볼 수 없습니다. 너는 할수 있니? –

+1

클래스를 사용하는 이유는 무엇입니까? 문자열을 취하고 수정 된 문자열을 반환하는 세 가지 함수가 필요합니다. –

관련 문제