0

我必须为大学做一个计划。

我在问题的陈述中已经声明了 3 个类。一级:

class piesa_a{
    protected:        
        int id;
        char *tip;
        int pret;
};

二等:

class piesa_b:public piesa_a
{    
    private:
        float lungime;
        bool bw;
};

第三类:

class piesa_c:public piesa_a
{    
    private:
        int nr;
        piesa_b *buf;
};

在main中,我需要创建一个数组来存储piesa_a、piesa_b、piesa_c等项目。然后我必须按价格对项目进行排序。

到目前为止我有这个代码:http: //pastebin.com/nx2FGSfe

该程序不完整,因为它没有显示数组中的每个项目。

我被困在这里。但是,如果您在数组之外显示数组的元素,它就可以工作。

简短:我在第 143 行有一个错误,我想解决它。

main.cpp:143:18: error: request for member ‘afisare’ in ‘*(v + ((unsigned int)(((unsigned int)i) * 4u)))’, which is of non-class type ‘piesa_a*’

代码在这里:

#include <cstdlib>
#include<iostream>
#include<string.h>
using namespace std;

class piesa_a{     
    protected:       
        int id;
        char *tip;
        int pret;

    public:
        piesa_a()
        {
            id = 0;
            tip = new char[1];
            pret = 0;
        }

        piesa_a(int aidi, char *typ, int pretz)
        {     
            id = aidi;
            tip = new char[strlen(typ)+1];
            strcpy(tip,typ);
            pret = pretz;     
        }

        piesa_a&operator =(piesa_a alta)
        {
            id = alta.id;
            tip = new char[strlen(alta.tip)+1];
            strcpy(tip,alta.tip);
            pret = alta.pret;

            return *this;
        }

        virtual void afisare()
        {
            cout<<"\n Piesa A: "<<id<<" "<<tip<<" "<<pret;
        }     
};

class piesa_b:public piesa_a
{

private:
    float lungime;
    bool bw;
public:
    piesa_b():piesa_a(){lungime = 0;bw = 0;}
    piesa_b(float lg,bool bl, int aid, char *tipi, int pretzz):piesa_a(aid,tipi,pretzz)
    {
        lungime = lg;
        bw = bl;
    }
    piesa_b&operator =(piesa_b &c)
    {
        id = c.id;
        tip = new char[strlen(c.tip)+1];
        strcpy(tip,c.tip);
        pret = c.pret;
        lungime = c.lungime;
        bw = c.bw;

        return *this;
    }

    void afisare()
    {
        piesa_a::afisare();
        cout<<"impreuna cu piesa B: "<<lungime<<" "<<bw<<"\n";
    }

};

class piesa_c:public piesa_a
{     
    private:
        int nr;
        piesa_b *buf;
    public:
        piesa_c():piesa_a(){nr=0; buf = new piesa_b[nr];}
        piesa_c(int n, piesa_b *bu,int aid, char *tipi, int pretzz):piesa_a(aid,tipi,pretzz)
        {
            nr = n;
            buf = new piesa_b[nr];
            for(int i=0;i<nr;i++)
                buf[i]= bu[i];
        }

        piesa_c&operator =(piesa_c &alta)
        {       
            id = alta.id;
            tip = new char[strlen(alta.tip)+1];
            strcpy(tip,alta.tip);
            pret = alta.pret;
            nr = alta.nr;
            for(int i=0;i<alta.nr;i++)
                buf[i] = alta.buf[i];           
        }

        void afisare()
        {                       
            for(int i=0;i<nr;i++)
                buf[i].afisare();           
        }       
};

int main(int argc, char** argv) {       
    piesa_b *H;
    H = new piesa_b[2];

    piesa_a A(4,"TIPA",120);
    piesa_b B(100,1,3,"TIPA",120);
    H[0]=B;
    H[1]=B;
    piesa_c C(2, H,14,"TIPC",20);

    piesa_a** v = new piesa_a*[3];

    v[0] = &A;
    v[1] = &B;
    v[2] = &C;

    for(int i=0;i<3;i++)
        v[i].afisare();

    return 0;
}

怎么了?

4

1 回答 1

0

在 C++(和当前的 C)中,强制转换几乎总是表明程序员不知道如何使用应该使用的语言。如果您需要 3 种数据类型的数组,最简洁的解决方案是基于 3 种类型的类的对象数组。如果您想以不同方式显示每个项目,则需要重载<<运算符,因此您只需遍历数组并继续<<每个项目。按价格排序意味着该类包含一个价格字段,并且您使用标准模板库中的排序,传递一个仅比较价格的比较操作。

于 2013-01-31T20:05:06.893 回答