首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2012-03-18 
子类继承基类的指针后为何值不对C/C++ codeclass aaa{protected:char* ppublic:aaa(string s):p(&s[0]){c

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

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()))

热点排行