개인 상속 기본 클래스 개체와 자식 개체 사이에 다음 세 가지 유형 변환이 있는데 두 개는 작동하지만 마지막 개체는 작동하지 않습니다. 다른 결과를 초래하는 것이 궁금합니다.개인 기본 클래스에 대한 세 가지 명시 적 상속 중 차이점
#include<iostream>
#include <string>
using namespace std;
class test :private string
{
public:
test(string st) :string(st){}
void show();
};
void test::show()
{
cout << (string)*this << endl; // typecasting 1, works, display "abcd"
}
int main()
{
test a("abcd");
a.show();
cout << (string &)a << endl; //typecasting 2, works, display "abcd"
cout<<(string)a<<endl; //typecasting 3; error C2243: 'type cast' : conversion from 'test *' to 'const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &' exists, but is inaccessible
}
a
은 '* this'와 동일하지 않습니다. 둘 다 객체이기 때문에? 그렇다면 No.1은 왜 작동합니까?
범위 때문에 그렇다면 왜 No.2가 작동합니까? 아무도 그들 사이의 차이를 만드는 각각의 뒤에 메커니즘을 설명해 주시겠습니까?
또한 첫 번째 방법은 문자열 개체를 만드는 것으로 보입니다. 개인 상속 된 경우 기본 클래스 참조를 파생 클래스 개체로 설정할 수 없습니다. 그러면 임시 문자열 객체가 어떻게 생성됩니까?
미리 감사드립니다.
직접 값을 사용하여 상속 캐스팅을 실제로 수행 할 수 없습니다. 이것은 보통 포인터와 참조에서만 작동합니다. '*'는'const '이기 때문에 왜 여기에 "작동한다". 'string & '와 동일합니다. 그러나 직접 값을 사용하여 한 유형을 다른 유형으로 실제로 캐스팅 할 수는 없습니다. 캐스트가 어떤 점에서 부정적인 부작용이 있는지 확실하지 않습니다. (값에 대한 참조를 캐스팅하고 반대의 경우도 마찬가지입니다.) 또한 다른 사람들을 위해서 : 나는 이것이 테스트 코드라는 것을 알고 있지만 실제 프로젝트에서 그런 코드를 작성하지 마라.) – Hayt
고마워. 기본 클래스 참조를 파생 클래스 객체로 설정할 수 없을 때 임시 문자열 obj가 생성되는 방식을 묻습니다. 우리가 명시 적 배회를 할 때 비밀리에'* this'를 기본 클래스에 대한 참조로 취급합니까? 또한, 나는 실제 프로젝트에서 이것을하지 않을 것이다 : 나는 오타로 그것을 가로 질렀다. –
'* this'는'const &'타입이라고 언급했다.좀 참조 할 수있게 해주시겠습니까? 나는 그것을 보았지만 유익한 정보를 찾지 못해 미안하다. 아마도 핵심 단어가 너무 광범위하게 사용되기 때문일 것이다.) 감사합니다. –