2014-10-04 1 views
0

저는 C++의 초보자입니다. 이제 모델을 구현하려고합니다. 클래스의 각 멤버에 대해 대입 연산자 (setter)를 오버로드하는 것이 맞습니까? 구성원이 아닌 함수가 개인/보호 데이터 멤버에 새 값을 설정하려고하는 경우 이는 매우 중요합니다. 예를 들어 :C++에서 클래스의 각 멤버에 대한 assingment 연산자를 코딩하는 방법

class Human { 
    private: 
     double aWeight[100]; /* let's say I want to keep... 
...a set of 100 weight measures of this human.*/ 

    // member functions and constructors here... 

    }; 

이제, 내가 많은 모델을 가지고 있기 때문에 이러한 측정 ... 비회원을 시뮬레이션하는 비 멤버 함수가 있다고 가정하자 나는 작은 함수로 각각의 방정식을 구현하고있어 model.cpp 파일. 분명히 내가 멤버 함수 이름 setWeight (이중 에너지, INT 일)을 가질 수있다, 그 작업을 수행합니다 :

bool ComputeWeight(Human * humanpt, double energy, int day){ 

    humanpt->aWeight[day] = energy * 0.8; 
} 

는 지금, 나는 토론에 가져다

bool ComputeWeight(Human * humanpt, double energy, int day){ 
    humanpt->setWeight(energy, day); 
} 

을하지만, 큰 모델을 코딩 할 때 새 데이터 멤버 값을 계산하고 집합 함수를 통해 개체 내에서 값을 업데이트하는 것은 매우 비실용적입니다. 클래스의 각 데이터 멤버에게 연산자 = 오버로드를 코딩 할 수 있습니까? 그래서 내 첫 번째 예제에서와 똑같이 내 Compute 함수를 진행하면서 멤버 aWeight에 대해 내 연산자를 사용할 수 있습니까?

많은 관심을 가져 주셔서 감사합니다.

+0

'할당 연산자 (setter로서)'이것은 두 가지 다른 것들입니다. 대입 연산자 또는 setter 함수에 대해 묻고 있습니까? –

+0

'a = b; '로 갈 때 연산자 구문에'a '의 내부 멤버를 지정해야합니다. 또한 포인터보다는 참조로 전달하는 것이 더 일반적입니다. ** 추가 : ** 당신은'ComputeWeight()'를'Person'의 친구로 만들 수 있기 때문에 필요할 경우 개인 회원들에게 접근 할 수 있습니다. – Galik

+0

나는 setter로서 대입 연산자에 대해 묻고있다. 어쩌면 내가 틀렸어. 그러나, 저는 aWeight 배열에 새로운 값을 설정하고 싶습니다. 저는 그것을 세터와 함께 할 것입니다, 그렇죠? 그러나 operator =를 setter로 코딩 할 수는 없으므로 aWeight [day] = 일부 계산 된 값을 코딩 할 수 있습니까? – mcarrol

답변

0

클래스의 각 구성원에 대해 할당 연산자를 과부하하는 것이 좋습니다.

C++에서는 개별 멤버에 대한 대입 연산자를 오버로드 할 수 없습니다. 멤버에게 직접 할당하는 유일한 방법은 멤버를 공개하고 할당 연산자가 포함 된 클래스가 아닌 멤버의 유형에 따라 오버로드됩니다.

한편, 클래스 멤버에게는 setter 메서드를 제공 할 수 있습니다.

나는 당신이 세터 방법 (예 : c.setWeight(10);으로 할당 연산자 (예를 c = 10;) 가미하여 생각이 두 개의 완전히 다른 것들

부록

:..

할당 연산자를 만들어가를 복사 한 객체의 데이터를 다른 객체의 데이터에 할당하는 것입니다. 할당 연산자를 사용하여 멤버 변수를 직접 설정할 수있는 유일한 방법은 해당 멤버를 public으로 선언하는 것입니다. 객체 지향 프로그래밍에서는 캡슐화 및 데이터 숨기기를 중단하기 때문에이 객체를 frowned합니다.

+0

* "C++에서는 개별 멤버에 대한 대입 연산자를 오버로드 할 수 없습니다."* 가능한 경우에도이를 추가하고 싶습니다. 모호함을 유발할 수 있습니다. 만약 두 멤버가 둘 다 int이면? 함수 정의가 똑같아 보이지만 실제 정의가 다른 경우에도 컴파일러는 오류를 발생시킵니다. – CoryKramer

+0

@ Code-Apprentice, 메모 해 주셔서 감사합니다. 나는 대입 연산자와 setter (멤버 함수)의 차이점을 이해하고 있지만, 코딩의 용이함을 위해, 내 자신의 연산자를 주어진 클래스 내에서 세터로 선언 할 수 있다고 생각했습니다. 당신의 설명이 정말 도움이되었습니다! – mcarrol

관련 문제