大白菜豆腐 2023-03-14 19:01 采纳率: 100%
浏览 14
已结题

关于#c++#的问题:一个是字符串类的派生

img


两道题关于c++的题目,一个是字符串类的派生,应该是多继承的问题

  • 写回答

4条回答 默认 最新

  • 关注

    都是类的继承问题

    #include <iostream>
    #include <cstring>
    using namespace std;
    class CStrOne
    {
    protected:
        char* str1;
    public:
        CStrOne(const char* p)
        {
            size_t len = strlen(p) + 1;
            str1 = new char[len];
            strcpy_s(str1, len, p);
        }
        ~CStrOne()
        {
            if (str1) delete[] str1; str1 = 0;
        }
        //获取字符串
        char* getStr1() { return str1; }
        //显示内容
        void show() { cout << str1 << endl; }
    };
    
    class CStrTwo :public CStrOne
    {
    private:
        char* str2;
    public:
        CStrTwo(const char* p1, const char* p2) :CStrOne(p1)
        {
            size_t len = strlen(p2) + 1;
            str2 = new char[len];
            strcpy_s(str2, len, p2);
        }
        ~CStrTwo()
        {
            if (str2) delete[] str2; str2 = 0;
        }
        void strCat()
        {
            size_t len1 = strlen(str1);
            size_t len2 = strlen(str2);
            size_t len = len1 + len2 + 1;
            char* ptr = new char[len];
            strcpy_s(ptr, len, str1);
            strcat_s(ptr, len, str2);
            ptr[len - 1] = 0;
            cout << ptr << endl;
            if(ptr) delete[] ptr;
            ptr = 0;
        }
    };
    
    int main()
    {
        char buf1[100], buf2[100], buf3[100];
        cout << "请输入一个字符串来构造CStrOne的实例:" << endl;
        cin.getline(buf1, 100);
        CStrOne str1(buf1);
        cout << "调用CStrOne的显示函数显示字符串的内容:"<<endl;
        str1.show();
    
        cout << "请输入两个字符串来构造CStrOne的实例(一行一个):" << endl;
        cin.getline(buf2,100);
        cin.getline(buf3, 100);
        CStrTwo str2(buf2,buf3);
        cout << "调用CStrTwo的合并函数合并两个字符串并显示:" << endl;
        str2.strCat();
    
        return 0;
    }
    

    都是一个套路

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月5日
  • 已采纳回答 3月28日
  • 创建了问题 3月14日

悬赏问题

  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?