2013-03-28 3 views
3

저는 프로그래밍 중이며 C++ 클래스에서 이상한 동작을 발견했습니다. 그래서 나는 문자열을 포함하는 간단한 클래스를 만들었고 그 클래스의 생성자와 객체의 문자열을 출력하는 friend 메서드 (show)를 만들었습니다. 그러나 주 기능에서 볼 수 있듯이. 나는 방법 (쇼) 간단한 끈에 통과하고 작동한다. 메쏘드 매개 변수가 객체에 대한 참조라면 편리하다는 것을 알았지?클래스 메서드 및 인수 전달

#include <iostream> 
using namespace std; 

class lol 
{ 
    char * str; 
public: 
    lol(const char * s); 
    friend void show(const lol & l); 
}; 

lol::lol(const char * s)  //assign string to object 
{ 
    str = new char[strlen(s)+1]; 
    strcpy(str,s); 
} 

void show(const lol & l)  //prints string from object 
{ 
    cout << l.str; 
}; 

int main() 
{ 
    show("TEST"); //passing string but not an object 
    return 0; 
}; 

답변

9

나는 그것이 편리하다고하지만, 왜 메서드 매개 변수는 객체를 참조하는 경우 일? 당신의 lol 클래스는 생성자가 const char*을 받아들이고 explicit으로 표시되지 인 정의하기 때문에

그것은 작동합니다.

는 입력 lol의 임시 객체를 구성하는 생성자에 인수로 문자 "TEST"를 문자열을 전달하고,이 임시 개체에 대한 참조를 인수 l 바인딩하여 호출 show("TEST")를 해결하기 위해 컴파일러 권한을 부여합니다.

class lol 
{ 
    char * str; 
public: 
    explicit lol(const char * s); 
// ^^^^^^^^ 
    friend void show(const lol & l); 
}; 

이 방법으로 호출 show("TEST")will result in a compiler error을 :

explicit로 생성자를 표시, 암시 적 사용자 정의 변환 시퀀스이 종류의을 방지합니다.

+0

감사합니다. 혼란 스러웠던 점은 참조와 함께 작동한다는 것입니다. 이제 나는 이해했다. –

+0

@Kolontai : 좋아, 다행이다. :) –