2013-09-01 3 views
2

매개 변수가있는 함수가 어떻게 작동하는지 설명 할 수 있는지 궁금합니다. 튜토리얼 등을 따라 왔지만 코드가 출력을 얻는 방법을 설명하지 못하는 것 같습니다. Heres는 예 :C++ 함수 매개 변수 및 클래스

#include <iostream> 

using std::endl; 
using std::cout; 
using std::cin; 
using std::string; 



class stan 
{ 
public: 
    void setName(string x) 
    { 
     name = x; 
    } 
    string getName() 
    { 
     return name; 
    } 

private: 
string name; 
}; 

int main() 
{ 
stan con; 
con.setName("Bruce Almighty"); 
cout << con.getName() << endl; 
} 

나는 우리가 개인 문자열 이름으로 공공 문자열 이름에서 얼마나하지 않습니다. 제가 말하고있는 것은 정말로 혼란스러워 보일 것입니다.하지만 그것을 어떻게 넣을 지 모르겠습니다.이 코드의 작동 방식을 이해하고 싶습니다. 도움이 사람에게 덕분에,이 클래스의

+0

'getName' 다시 반환 값 「멤버 포인터 this 가리키는 오브젝트 내부 name 불리는 " 그 문자열 변수'name'에 존재합니다 –

+1

어떤 개발 환경을 사용하고 있습니까? 디버거를 사용하여 한 줄씩 코드를 단계별로 실행하고 각 단계를 진행하면서 변수 값을 검사 할 수 있어야합니다. 그것은 실제로 어떻게 작동 하는지를 배울 때 도움이됩니다. –

+0

게시 한 코드가 컴파일 되었습니까? 'std :: string' 클래스 ('std :: string' 사용)에 대한 선언을 사용했지만 관련 헤더''을 포함하지 않았습니다. –

답변

0

http://www.cplusplus.com/doc/tutorial/classes/

많이
  • 개인 회원은 동일한 클래스의 또는 친구에서 다른 멤버 내에서 액세스 할 수있는 것을 의미한다.
  • 보호 된 멤버는 동일한 클래스의 멤버와 친구 인 에서 액세스 할 수 있지만 파생 클래스의 멤버도 액세스 할 수 있습니다.
  • 마지막으로 공개 멤버는 개체가 보이는 곳 어디에서나 액세스 할 수 있습니다.

기본적으로, 개인 회원은 만 클래스 기능에 액세스 할 수 있습니다 무언가이다. 따라서 "문자열 이름"은 클래스 함수에서만 읽기/쓰기가 가능합니다. 공개 함수/변수는 클래스 외부에서 호출 할 수 있습니다. 예를 들어 "setName"및 "getName"

개인 문자열을 쓰거나 읽으려면 코드에서 만든 공용 함수를 사용합니다.

1
  1. 프로그램은 기능 main에서 시작한다.
  2. stan 유형의 로컬 변수 con을 선언합니다.
  3. 개체 consetName 메서드는 인수가 "Bruce Almighty" 인 경우 호출됩니다.
  4. 머리말이있는 방법 void setName(string x)이 실행을 시작합니다. 매개 변수 x은 해당 인수 ("Bruce Almighty")의 값을 취합니다.
  5. 이 개체의 전용 멤버 namex ("Bruce Almighty")의 값으로 설정됩니다.
  6. 방법 setName은 호출 된 지점으로 되돌아갑니다.
  7. cout은 콘솔 출력을 나타냅니다.
  8. 운영자 <<을 적용하려면 con.getName()을 평가해야합니다. 객체 con의 메소드 getName이 인수없이 호출됩니다.
  9. 머리글 string getName()의 메서드가 실행되기 시작합니다. 관련 매개 변수가 없습니다.
  10. 이 개체의 전용 멤버 name의 값이 반환됩니다 ("Bruce Almighty").
  11. 메서드 getName은 값이 "Bruce Almighty" 인 호출 지점으로 되돌아갑니다.
  12. cout은이 값을 사용하여 콘솔에 생성합니다.
  13. 동일한 cout 개체는 콘솔에 endl 값을 생성합니다. endl 새 행을 콘솔에 작성하십시오.
0

기본 단계 :

con.setName("Bruce Almighty"); 

setname 함수를 호출하고 여기에 문자열 "Bruce Almighty"를 전달합니다.

void setName(string x) 

당신이 보낸 문자열 "Bruce Almighty"를 수신하고, x를 호출합니다.

name = x; 

변수 name"Bruce Almighty"이다 x의 값을 할당한다.

con.getName() 

getName 함수에서 값을 요청합니다.

string getName() 

string 반환 것과 getName 기능을 선언합니다.

return name; 

"Bruce Almighty"에 변수 name에 유지 된 문자열 setName 세트를 취하여 출력 cout로 전송 호출자에게 반환한다.

0

setName은 "Bruce Almighty"라는 문자열을 스탄 마을의 개인 이름 필드로 전달하는 데 도움을주는 사람입니다.

당신은 당신의 매개 변수 X로 브루스 올마이티 "인수를"에서는 setName 이봐, 난이 통과 하겠어 ", 말하고있다. 나는 당신이 그것을 어떻게 걱정하지만, 단순히 개인 에 제공하지 않습니다

에서는 setName는 말한다 필드! 이름을 "좋아, 내가 그것을 가지고, 당신은 내 X 매개 변수를 잘 브루스 올마이티 의미?"

을 당신은 "바로 네!"라고

setName이 말합니다. "좋아, 이제 끝났어 내가 어떻게했는지 알 필요가 없어,이게 우리가 추상화라고 부르는거야 주문하면 되겠지만 내가 어떻게했는지 이해할 필요는 없어. 알고, 나는 할당 연산자 =를 사용하여 그것을했다 당신이 내 매개 변수 에 브루스 올마이티를 제공하기 때문에. 나는. 오른쪽에 X을 왼쪽에 개인 이름 필드를 배치하고, 내 매개 변수 X, 그것은 개인 이름 필드에 할당된다. 붐! "

0

클래스 정의에서 이름 만 사용하여 데이터 멤버에 액세스 할 수 있습니다. 예 :내부 setName 본문에는 모든 구성원의 이름이 범위에 있으므로 개인 데이터 멤버 name도 있습니다. 이러한 방식 명령문 :

name = x; 

은 프라이빗 데이터 구성원 name-x 값 (setName의 인자)를 할당한다.

로컬 변수의 멤버 이름이 같으면 이름 충돌이 발생할 수 있으므로 멤버 이름을 지정할 때는주의해야합니다. 당신이 그들을 피할 수 있습니다 귀하의 회원 접두어 this-> 같은 :

this->name = x; 

또는 모든 데이터 멤버의 이름에 접두사 제공으로 명명 규칙을 사용하여 :

m_name = x; // "m_" stands for "member" 
... 
private: 
    string m_name; 

this 포인터를 나타내는 C++ 키워드입니다 메소드 (즉, 멤버 함수)를 호출하는 객체에 전달합니다. 클래스 정의 내에서 해당 객체를 참조하는 데 사용할 수 있습니다. 따라서 this->name수단

SetName`가 Buruce 전능과의 오브젝트`con`의 캐릭터 'name` 할당된다
관련 문제