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