プライベートに継承された基本クラス オブジェクトと子オブジェクトの間に次の 3 つの型キャストがあります。そのうちの 2 つは機能しますが、最後の 1 つは機能しません。何が異なる結果をもたらすのか疑問に思っています。
#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が機能するのですか?それらの間の違いを生むそれぞれの背後にあるメカニズムを誰か説明してもらえますか?
また、最初のメソッドは文字列オブジェクトを作成するようです。private 継承の場合、基底クラス参照を派生クラス オブジェクトに設定することはできません。では、一時的な文字列オブジェクトはどのように作成されるのでしょうか?
前もって感謝します。