MikasuSoda 2023-07-05 10:52 采纳率: 66.7%
浏览 20
已结题

C++继承问题,还请各位解答


#include <iostream>
#include <string.h>

using namespace std;

class Person
{
private:
    int m_age;
    char* m_name;

public:
    Person();

    Person(char* name, int age)
    {
        strcpy(this->m_name,name);
        this->m_age = age;
    }

    ~Person();

    void setname(char* name)
    {
        strcpy(this->m_name, name);
    }

    void setage(int age)
    {
        this->m_age = age;
    }

    void getname()
    {
        cout<<"my name is :"<<this->m_name<<endl;
    }

    void getage()
    {
        cout<<"my age is:"<<this->m_age<<endl;
    }
};

class Student:public Person
{
private:
    int m_class;
public:
    Student(char *name , int age , int room):Person(name,age)
    {
        this->m_class = room;
    };

    void setclass(int room)
    {
        this->m_class = room;
    }

    void getclass()
    {
        cout<<"my class is "<<this->m_class<<endl;
    }

    void disp()
    {
        this->getage();
        this->getclass();
        this->getname();
    }
};

int main()
{
    Person *p1 = new Person("som",18);
    p1->getage();
    p1->getname();
    Student *s1 = new Student("abab",20,1);
    s1->disp();

}

输出结果如下,只有p1的输出没有s1的输出

img

  • 写回答

3条回答 默认 最新

  • 0x0007 2023-07-05 13:49
    关注
        char* m_name;
    

    这是个空指针啊,没崩溃是运气好。

    改动的方法很多,只要初始化这个变量就好。最简单的是为修改为定长字符串数组,如

        char m_name[255];
    

    另外,main里new 两个类的时候,用了字面量字符串作为参数,这样最好在相关函数声明中明确为 const,如

       Person(const char* name, int age)
       void setname(const char* name)
       Student(const char *name , int age , int room):Person(name,age)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月13日
  • 已采纳回答 7月5日
  • 创建了问题 7月5日