m0_55629479 2021-11-30 13:14 采纳率: 66.7%
浏览 23
已结题

如何声明并定义一个class,使输出结果如注释所示


Base b1(2), b2(10);
    
b1.print();        // 2
b2.print();        // 10
for (int i = 0; i < 5; i++) {
    b1.setN(i, (i+1) * 20);
    b2.setN(i, (i+1) * 10);
}
b1.printData();  // 20 40
b2.printData();  // 10 20 30 40 50 0 0 0 0 0

Derived d(5);
d.print();        // 5
d.printData();        // 0 0 0 0 0
for (int i = 0; i < 10; i++) {
    d.setN(i, (i + 1) * 3);
}
d.printData();    // 3 6 9 12 15
d.insert(99);    // "Base" class does not have "insert" method.
d.printData();    // 3 6 9 12 15 99

  • 写回答

1条回答 默认 最新

  • 关注

    类的声明如下:

    #include <iostream>
    using namespace std;
    class Base
    {
    protected:
        int len;
        int *pt;
    public:
        Base(int n)
        {
            len = n;
            pt=new int[n];
        }
        ~Base()
        {
            if(pt)
            {
                delete[] pt;
                pt = 0;
            }
        }
        void print()
        {
            cout << len<<endl;
        }
        void printData()
        {
            for (int i =0;i<len;i++)
            {
                if(i<len-1)
                    cout << pt[i]<<" ";
                else
                    cout << pt[i]<<endl;
            }
        }
        void setN(int pos,int data)
        {
            if(pos < len)
                pt[pos] = data;
        }
    };
    
    class Derived :public Base
    {
    public:
        Derived(int n):Base(n){}
        void insert(int data)
        {
            int* p=new int[len+1];
            for(int i=0;i<len;i++)
                p[i] = pt[i];
            p[len] = data;
            delete[] pt;
            pt = p;
        }
    };
    
    
    
    
    int main()
    {
    
        Base b1(2), b2(10);
        b1.print();        // 2
        b2.print();        // 10
        for (int i = 0; i < 5; i++) {
            b1.setN(i, (i+1) * 20);
            b2.setN(i, (i+1) * 10);
        }
        b1.printData();  // 20 40
        b2.printData();  // 10 20 30 40 50 0 0 0 0 0
        Derived d(5);
        d.print();        // 5
        d.printData();        // 0 0 0 0 0
        for (int i = 0; i < 10; i++) {
            d.setN(i, (i + 1) * 3);
        }
        d.printData();    // 3 6 9 12 15
        d.insert(99);    // "Base" class does not have "insert" method.
        d.printData();    // 3 6 9 12 15 99
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月6日
  • 已采纳回答 11月30日
  • 创建了问题 11月30日

悬赏问题

  • ¥15 php 将rtmp协议转hls协议,无法播放
  • ¥15 miniconda安装不了
  • ¥20 python代码编写
  • ¥20 使用MPI广播数据遇到阻塞
  • ¥15 TinyMCE如何去掉自动弹出的“链接…”工具?
  • ¥15 微信支付转账凭证,如何解决
  • ¥15 在win10下使用指纹登录时,界面上的文字最后一个字产生换行现象
  • ¥20 使用AT89C51微控制器和MAX7219驱动器来实现0到99秒的秒表计数,有开始和暂停以及复位功能,下面有仿真图,请根据仿真图来设计c语言程序
  • ¥15 51单片机 双路ad同步采样
  • ¥15 使用xdocreport 生成word