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");


甚至更好地使用newstd::cout

同样,一旦完成,别忘了用free调用malloc来释放内存。如果使用new,请使用delete

关于c++ - c++:指针数据成员在类继承层次结构中的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6382097/

10-11 16:56