2012-12-11 2 views
-2

저는 C++을 알고 있었기 때문에 누구나 TorF 관련 질문에 도움을 줄 수 있다면 좋을 것입니다.C++ 코드에서 생성자, 포인터, 참 또는 거짓 질문 복사

true 또는 false : C++을 사용하면 클래스의 복사 생성자는 값을 함수 입력으로 전달할 때만 사용됩니다.

참 또는 거짓 : 다음 C++ 함수 madeA()은 유효한 함수 구현입니다.

ClassA{ 
public: 
    int x; 
    char *y; 
}; 
void madeA(const A &t_a){ 
    t_a.x = 1; 
    t_a.y = 0; 
} 

참 또는 거짓 : 다음 C++ 코드 세그먼트은 동일합니다.

void cmax(int a, int b, int *max){ 
    if(a>b) *ax = a; 
    *max = b; 
} 

using namespace std; 

void main(){ 
    int *max = new int; 
    cmax(20, 5, max); 
    cout<< *ax << endl; 
} 

다음 코드 : 첫째

void cmax(int a, int b, int &max){ 
    if(a>b) max = a; 
    max = b; 
} 

void(){ 
    int max; 
    cmax(20, 5, ax); 
    std::cout <<max<<std::endl; 
} 
+1

적어도 당신이 생각하는 것과 그 이유를 말해 줄 수 있습니까? – chris

+0

첫 번째 질문 : "가치 전달"이란 무엇을 의미하는지 모르겠으므로 대답 할 수 없습니다. 두 번째 : 컴파일러에서 실행하여 madA 함수의 "const"가 잘못되었음을 알려주고 있습니다. 3rd : 포인터 사용 이외의 차이점을 보지 못했습니다. 해답을 더 잘 이해하기 위해 이들 모두에 대한 더 나은 설명을 원했습니다. – ddwong

답변

1

: 거짓.
복사 생성자는 복사가 필요할 때마다 호출 될 수 있습니다.
간단한 예제 : 값으로 반환

두 번째 : 거짓.
const 인수에 대한 참조 내용을 수정하고 있습니다. 컴파일하지 않아야하고 포인터 해커를 사용하더라도 정의되지 않은 동작이 발생합니다.

세 번째 : 거짓.
첫째로 메모리 누수가 없습니다.
두 번째 코드 스 니펫은 컴파일되지 않습니다.

+0

기술적으로, 나는 그것을 메모리 누출이라고 부르지 않을 것이다. 할당 된 정수는 하나뿐입니다. 프로그램 종료 직후에 정리됩니다. 그것이 루프에 있었다면 그렇습니다. – chris

+0

방금 ​​컴파일 할 세 번째 질문에 두 번째 코드가 있습니다. 답변을 주셔서 감사합니다. 왜 그런지는 모르지만 지금은 이해가되지 않습니다. – ddwong

+0

답안지는 첫 번째가 참이라고 말합니다. – ddwong