조공앙망
출력 네번째 줄에서 price:3000 , discountprice:2550 을 생각했는데
왜 둘 다 2550이 나오는지 잘 모르겠다......
Product::print() 면 Product 클래스의 print() 안에 this->getPrice()를 출력해야 되는게 아잉교??????
조공앙망
출력 네번째 줄에서 price:3000 , discountprice:2550 을 생각했는데
왜 둘 다 2550이 나오는지 잘 모르겠다......
Product::print() 면 Product 클래스의 print() 안에 this->getPrice()를 출력해야 되는게 아잉교??????
p2 print 될때, price가 p1이 아니라 product p2 값이 들어가서 두 번 되는거임
product 클래스 안에서 print 함수를 호출하는건데 어떻게 discountproduct 클래스의 getprice 함수가 호출되는거야 ??
virtual 형도 알아봤는데, class에 똑같은 형태의 void가 있으면, void우선 출력인데, 없으면 virtual가상 함수 출력인 거 같은데 위 class엔 없어서, void print()로 생각해도 될듯
그게 아니라, Product()::print()가 호출되는데, 이 전에 생각해봐야 될것이, p2->print()라서 p2의 price가 product로 호출 된거임 p2는 toothbrush가 name price는 2550
뭔 소린지 모르겠다... 저기에선 둘 다 virtual void라 해당사항 없는거 아님??
제 생각엔 님이 p1이 toothbrush name에, price가 3000인데, 이름이 같고, class 두 개가 달라서 위 코드도, product는 p1 Discountproduct는 p2라고 착각해서 그런 것 같음
아아아아 위에서 이미 p2->getPrice() 작업 때문에 이미 p2의 price가 2550이라는 뜻인거야?
ㅇㅇ 둘 다 virtual void라 그냥 void로 생각해도 되는데, 제가 잘 몰라서 찾아본거임 ㅇㅅㅇ.. 상속 코드 한번 보긴했는데 개 초보 일떄 딱 한번 봐서... 지금도 초보지만
네네
정답!
그러면 생각해 보아야 될 게 ..
뒤에서 출력된 2550은 2550 * 0.85가 출력돼야하는거 아닌가??
마지막줄 discountprice 부분
저건 모르겠음 컴파일 최적화 문제인것 같기도 하고..
아 이거 컴파일 시켜보니까, getPriceMember가 없는데 껏다 켜보면 오류뜨실듯
getpricemember가 업서???
미안 밖이라 지금은 컴파일을 못하는데 도와줘서 너무 고맙다
코드 개조해봤는데, this->getPrice()한번 더 코드 넣었는데 안되는 거 보니 컴파일 최적화 때문에, 한번 this-> 로 호출 해준 코드라서, 안되는 게 맞는 것 같다..ㅇㅇ 이런코드는 직감적으로 알아야 되는데 힘드네
직감 x 직관
어차피 안되는 경우의 수는 몇 없음. 1번 p1에 있던 p2값이 중복되어 넘기는 건데, 애초에 구조체를 따로 짯는데 그럴 가능성은 희박하고, 컴파일러 오류일수도 있어서 이거볼려고, 다른 컴파일 실행해봤는데 제대로 개조해보니, 똑같은 값 나오는 거 확인했고, 마지막으로, getPrice()랑 p1->print() p2->print() 한번씩 더 호출해줘서(값 달라지는 지 확인) 결과는 예상대로 값이 3000과 2550만 나오더라
이럴 때는 항상 컴파일러가 미리 값을 결정해줘서, 의도와는 다른 값을 나오도록 하는 거임 결론적으로, p2->getPrice()때 한번 p2의 price값이 결정되었으므로, this->로 호출해줘도 이미 한번 결정된 값이므로, 컴파일러의 최적화 때문에, 이미 정해진 p2값이 return 되는 것임
컴파일러 오류는 훌륭한 컴파일을 무시하는 게 아니라, vs는 컴파일러가 너무 대단한 성능이라 이게 된다고? 싶은 것 까지 다 허용해줘서 오류가 뜰 가능성을 말하는 거임
허허.. 코린이는 너무 어렵다..
그러면 내가 원하는 대로 출력을 해주려면 .. 어떻게 해줘야하는거지?
방법이 떠오르지 않네
컴파일러 오류는 난생 처음이라 어지럽네