子类继承基类的指针后为何值不对解决方法
子类继承基类的指针后为何值不对C/C++ codeclass aaa{protected:char* ppublic:aaa(string s):p(&s[0]){c
子类继承基类的指针后为何值不对
C/C++ codeclass 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()))