读书人

子类继承基类的指针后为何值不对解决方

发布时间: 2012-03-18 13:55:39 作者: rapoo

子类继承基类的指针后为何值不对

C/C++ code
class aaa{protected:    char* p;    public:    aaa(string s):p(&s[0])    {        cout<<"基类  "<<p<<endl;    }};class bbb:public aaa{public:    bbb(string s):aaa(s)    {        cout<<"子类  "<<p<<endl;    }};int main(int argc, char* argv[]){    string s="123456";    bbb b(s);    return 0;}


运行结果是:
基类 123456
子类(一排汉字乱码)

求高手解释原因

[解决办法]
错误的写法 p(&s[0]),
却要个合理的解释,汗,
[解决办法]
aaa,bbb的构造函数参数都是临时对象,其中bbb的传递给aaa的string有效,但是临时。p指向的都是临时变量的地址。
另外,string不保证&s[0]返回是c风格字符串指针。
[解决办法]
简单的测试了一下,&s[0]的值是0x002cf6d4,而p的值为0x002cf4d9,说明p(&s[0])传给p的并不是指向s的指针,而是字符串,具体是怎么赋值的就不太了解了。
[解决办法]
aaa(string s) : p(const_cast<char*>(s.c_str()))

读书人网 >VC/MFC

热点推荐