c++类的组合问题生成教师与学生两个对象

用类的组合技术,设计一个基本信息类、一个学生类、一个教师类。基本信息类包括姓名、性别、手机号、班级;学生类包括姓名、性别、手机号、班级、数学、语文和英语等成绩;教师类包括姓名、性别、手机号、班级、专业、教龄等。以上三个类必须包含构造函数,其他成员函数自行设计。主函数中,至少分别生成一个学生类和一个教师类对象,并调用相关函数输出其基本信息。

下面代码实现了一个基础信息类给你参考一下,如果有用请采纳!

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

using namespace std;

class BaseIMG
{
public:
    BaseIMG(const char* str1,const char* str2,const char* str3,const char* str4)
    {
        m_name = func1(str1);
        m_sex = func1(str2);
        m_nums = func1(str3);
        m_class = func1(str4);
    }
    BaseIMG(const BaseIMG& img)
    {
        m_name = func1(img.m_name);
        m_sex = func1(img.m_sex);
        m_nums = func1(img.m_nums);
        m_class = func1(img.m_class);
    }
    ~BaseIMG()
    {
        m_name = func2(m_name);
        m_sex = func2(m_sex);
        m_nums = func2(m_nums);
        m_class = func2(m_class);
    }

    char* getname()
    {
        return m_name;
    }

    char* getsex()
    {
        return m_sex;
    }

    char* getnums()
    {
        return m_nums;
    }

    char* getclass()
    {
        return m_class;
    }

private:
    char* func1(const char* ch)
    {
        char* temp;
        if(ch==nullptr)
        {
            temp = new char[1];
            *temp = '\0';
        }else{
            int len = strlen(ch);
            temp = new char[len+1];
            strcpy(temp,ch);
        }
        return temp;
    }
    char* func2(char* ch)
    {
        if(!ch)
            delete[] ch;
        return nullptr;
    }

private:
    char* m_name;
    char* m_sex;
    char* m_nums;
    char* m_class;
};

int main(){

    BaseIMG test1("小明","男","123456789","三年A班");
    cout<<test1.getclass()<<endl;
    cout<<test1.getname()<<endl;
    BaseIMG test2("小青","女","987654321","三年B班");
    cout<<test2.getsex()<<endl;
    BaseIMG test3(test1);
    cout<<test3.getnums()<<endl;

    return 0;
}

请问你在编写过程遇到了什么问题呢