일부 장소를 읽은 후에 혼란 스럽습니다.C++ 클래스에는 기본 constuctor가 있고 다음과 같은 경우에 어떤 생성자가 호출됩니까?
나는이 예제에서 예제를 작성 중입니다. page 구성원 (Author)이 구성원 중 하나 인 클래스 (Book)가 있다고 가정 해 봅시다. 여기에 생성자가 있습니다 :
Book::Book(string name, Author author, double price, int qtyInStock)
: name(name), author(author) { **// Must use member initializer list to construct object**
// Call setters to validate price and qtyInStock
setPrice(price);
setQtyInStock(qtyInStock);
}
나는 이니셜 라이저 lisr 대신 생성자 내에서 객체 작성자를 선언하려고했습니다. 그것은 나에게 오류를 줬다. no matching function to call Author::Author()
-> 작성자의 기본 구성입니다.
이 유래 게시물에서 읽은 후 : this1 및 this2 내가 아는 바로는 그 2에서 요약,이다 :
객체는 실행이 몸에 들어갈 때 완전히 초기화해야 & 간주됩니다생성자의 이름 :
개체의 모든 멤버가 초기화 목록에서 초기화됩니다. 명시 적 존재를 초기화하지 않더라도, 컴파일러는 행복하게, INT와 같은 당신
기본 유형 그렇게 또는 더블 기본 생성자 위의 모든 이들로부터 그래서
이 무엇을 할 것 인 I 이해는 입니다. 사용자 정의 객체/클래스는 기본 유형과 달리 기본 생성자을 자동으로 갖지 않습니다. 그 이유는 컴파일러가 (사용자 정의 클래스)에없는 기본 생성자를 사용하여 초기화하려고하기 때문에 복사 생성자를 호출하는 멤버 초기화 목록을 사용하지 않으면 오류가 발생합니다.
그래서 가능한 해결 방법은 다음과 같습니다 클래스가 있는가 "얼마나 많은 기본 방법 : 그 말에 유래에이 post를 읽을 다음 클래스의 기본 생성자를 정의하거나 멤버 이니셜 라이저
를 사용하여 ? " 대답은 그것이 기본 consturctor이있는 경우
1. 왜 내 첫 번째 경우 (책과 저자 클래스) 오류를 주는가 그것은 기본 생성자을 가지고 언급?
이 또한 나는이 page 읽고, 내가 전에 클래스 포인트를 정의라고 할 수 있습니다, 다음 페이지는 썼다 : 우리는 위와 같이 선언 할 때
Point p1; // **Invoke default constructor**
// OR Point p1 = Point(); NOT Point p1();
2. 그래서,이 기본 생성자를 호출합니까? 그렇다면 오류가 발생하지 않는 이유는 무엇입니까? 클래스에 기본 생성자가 없다고 생각 했나요?당신은 내가 여기 일을 명확히하고, 위의 두 questons에 대답 할 수 있다면
는 감사합니다 (이탤릭체)
'저자'클래스 정의를 포함하여 코드를 게시해야합니다. 지침은 다음을 참조하십시오. – xaxxon
"클래스에 기본 생성자가 없다고 생각 했습니까? *"이 결론으로 이어진 추론을 따라 가야합니다. 거기에서 결함을 발견 할 것입니다. 그대로 서서, 당신의 질문은별로 의미가 없습니다. – juanchopanza
@xaxxon 저자 클래스 정의는 내가 언급 한 링크에 있습니다. https://www.ntu.edu.sg/home/ehchua/programming/cpp/cp3_OOP.html – mon