2014-11-13 1 views
0

내 초보자 질문에 죄송합니다. 하지만 저는 C++을 몇 번 썼기 때문에 장치와 관련된 정보를 관리하고 싶습니다. 목표는 변수에 장치 이름을 지정하고이 변수에 액세스 할 수있는 다른 모든 클래스를 얻는 것입니다.다른 API가 정의하고 지정한 변수에 액세스하는 방법

나는 클래스 장치 정의

: 내 MAIN.CPP에서

class Device { 
public: 
    int value; 
    ... 
} 

을하는 browser.cpp에서

int main (...) 
{ 
    Device MyDevice; 

    MyDevice.value = 10; 
    Browse ui; 
    ui.show(); 
} 

, 내가 MyDevice.value를 얻을 수 있도록하고 싶습니다과 그것을 표시하십시오. 나는 그것을하는 방법을 정말로 모른다. browser.cpp는 Qt의 UI가 지원하는 정보를 표시하는 cpp 코드입니다. 현재 ui는 ui.show() API를 사용하여 표시됩니다.

+0

I에 MAIN.CPP에서이 UI를 호출하고있어의 값을 얻을하는 방법을 이해하는 것은 매우 확실하지 않다 Device에서 Browse 클래스의 슬롯으로 신호를 연결합니다. 이것은 Device 객체의 값이 변경된다고 가정 할 때의 Qt 방법입니다. – drescherjm

답변

1

valueprivate이어야합니다. 그렇지 않은 경우 Device 클래스의 개인 데이터가 클라이언트에 노출됩니다. 코드가 실행 되더라도 캡슐화 원칙을 위반하는 잘못된 프로그래밍 방법으로 간주됩니다. value을 비공개 데이터 멤버로 설정하고 Device 클래스의 클라이언트가 액세스하려면 을 반환하는 게터 메서드 getValue을 제공해야합니다. 이 장소를 찾았 으면 Device 개체에 대한 참조를 허용하도록 브라우저를 모델링해야합니다. Browser의 생성자에서이 작업을 수행하거나 Browser의 멤버 함수를 통해이 작업을 수행 할 수 있습니다. BrowserDevice 인스턴스를 알고 있으면 을 호출하여 value을 검색하여 UI에 표시 할 수 있습니다.

class Device { 
public: 
    int getValue() const { 
    return m_value; 
    } 
private: 
    int m_value; 
}; 

class Browser { 
public: 
    Browser(const Device& device) : 
    m_device(device) { 

    } 
    void displayValue() { 
    someWidget.show(m_device.getValue()); 
    } 
private: 
    const Device& m_device; 
}; 

내가 C++에 좋은 초보자의 책으로 시작 (및 객체 지향 프로그래밍) 캡슐화, 참조의 개념을 숙지하는 것 등

+0

이 경우에는 포인터 매개 변수를 사용하여 범위를 벗어나는 임시 개체를 전달하지 못하게합니다. 게터가 왜 변하지 않습니까? –

+0

getter가 const가되는 좋은 점. 그에 따라 내 대답을 편집했습니다. 포인터가 어떻게 도움이됩니까? 'Browser'를 생성하는 코드가'Browser'가하는 한'Device' 인스턴스가 살아있는 것을 보장하지 않는다면, 포인터 나 참조를 가지고 있는지에 관계없이 당신은 매달린 엔티티를보고 있습니다. – DigitalEye

0
: 요약하면, 당신의 코드는 다음과 같을 것

Browser.cpp

FileBrowserMainWindow::FileBrowserMainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::FileBrowserMainWindow) 
{ 
ui->setupUi(this); 
... 
} 

FileBrowserMainWindow::~FileBrowserMainWindow() 
{ 
    delete ui; 
} 

및 Browser.h

:

내 브라우저 인터페이스에 의해 정의된다

namespace Ui { 
class FileBrowserMainWindow; 
} 

class FileBrowser : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit BrowserMainWindow(QWidget *parent = 0); 
    ~FileBrowserMainWindow(); 
    Ui::FileBrowserMainWindow *ui; 

private: 
    const Device& m_device; 
}; 

은 내가 Browser.h/CPP

내가 주

FileBrowserMainWindow ui; 
//Ui::FileBrowserMainWindow ui; 
ui.show(); 
+1

자세한 내용을 추가하려면 질문을 편집해야합니다. –

+0

거룩한 담배! 귀하의 질문을 포함하도록 내 대답을 편집했습니다 !!죄송합니다. 여러 가지 문제가 여기에 있습니다. 코딩을 시작하기 전에 C++ 기초 지식을 익혀야합니다. – DigitalEye

관련 문제