class Base {
protected:
string m_strName;
char* pchChar;
public:
Base()
{
m_strName = "Base";
pchChar = NULL;
};
void display()
{
printf(" display name : %s %c\n",m_strName.c_str(),pchChar);
};
};
class Derived : protected Base {
public:
Derived()
{
init();
};
void init()
{
m_strName = "Derived";
pchChar = (char*)malloc(sizeof(char));
strcpy(pchChar,"A");
printf(" char %c\n",*pchChar);
display();
};
};
int main()
{
Derived* pDerived = new Derived();
return 0;
}
观察到的输出是
char A
display name : Derived P
而我希望pchChar在两种情况下都应具有值“ A”。
我是否缺少任何信息?
请建议。
最佳答案
您忘记了*
:
printf(" display name : %s %c\n",m_strName.c_str(), *pchChar);
它应该是
*pchChar
,而不是pchChar
。因为您将其打印为%c
。或者,您可以使用
%s
作为格式字符串,如果c字符串是以null终止的字符串,则可以使用printf。目前,它不是以null终止的。您应该这样做:pchChar = (char*)malloc( 2 * sizeof(char)); //2 chars, one for `\0`
strcpy(pchChar,"A");
甚至更好地使用
new
和std::cout
。同样,一旦完成,别忘了用
free
调用malloc
来释放内存。如果使用new
,请使用delete
。关于c++ - c++:指针数据成员在类继承层次结构中的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6382097/