C ++动态构造函数

时间:2016-11-17 14:51:12

标签: c++

我收到错误:

  

没有操作员" []"匹配这些操作数

对于这一行:

cout << A[j].display(n)

但是当我拿出[j]时,我收到错误:

  

class&#34; list&#34;没有会员&#34;显示&#34;

这是我的代码:

class list
{
protected:
    int *p; // pointer to a list
    int size; // dimension
public:
    list(int x)
    {
        size = x;
        p = new int[size]; 
    }
    void get(int i, int val)
    {
        p[i] = val;
    }
};

class dlist : public list
{
public:
    int display(int i)
    {
        return p[i];
    }
};

int main()
{
    int n;
    cout << "Enter elements in a row\n";
    cin >> n;

    list A(n);

    int j, val;
    for (j = 0; j < n; j++)
    {
        cin >> val;
        A.get(j, val);
    }
    cout << "\n";
    cout << "List of elements are :\n";
    cout << "----------------------\n";
    for (j = 0; j < n; j++)
        cout << A[j].display(j) << "\t"; 
    cout << "\n";
    return 0;
}

请帮忙!

1 个答案:

答案 0 :(得分:1)

list确实没有成员函数display。声明为

的类dlist
class dlist : public list
//...

有这样的成员函数。但是,对象A在main中定义为类list

的对象
list A(n);

此外,您无法创建dlist类型的对象,因为您必须明确定义该类型的构造函数。

如果你想使用多态,那么引入虚函数,例如成员函数display就像虚拟一样。

此语法

cout << A[j].display(j) << "\t";
        ^^^^^^^^^^^^^^

不正确,因为对象A是标量对象。它不是一个对象数组,并且该类没有重载operator []

您应该首先明确定义一个虚拟析构函数(否则程序中可能存在内存泄漏),使用参数,复制构造函数和类列表中的复制赋值运算符删除构造函数中动态分配的内存。然后你可以定义下标运算符等等。