如何声明并定义一个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

类的声明如下:

#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;
}