我在私有继承的基类对象和子对象之间有以下三个类型转换,其中两个有效,但最后一个无效。我想知道是什么导致了不同的结果。
#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
}
与 '*this'不a
一样 - 因为两者都是对象?那么为什么 No.1 有效呢?
如果是因为范围,那么为什么 No.2 有效?任何人都可以解释一下它们背后的机制吗?
此外,第一种方法似乎是创建一个字符串对象。在私有继承的情况下,不能将基类引用设置为派生类对象。那么临时字符串对象是如何创建的呢?
提前致谢。