Премини към съдържанието

Препоръчан отговор


Здравейте, имам една курсова, която работи, но днеска я предадох и ми казаха, че достъпа до член променливите трябва да е private, а аз съм ги направил public. Когато ги направя private тогава втория клас не ги разпознава. Затова ако някой може да ми помогне. Ето и кода:

#include<iostream>//vhodno izhodna biblioteka
#include<string>//za rabota sas string
#include<vector>//konteiner vektor
#include<fstream>//za rabota s fail
#include<iterator>
#include<algorithm>


using namespace std;

class CSongs
{// chlen promenlivite
private:
    string zaglavie;
    string izpulnitel;
    string klip;
    int godina;
    string janr;
public:

    CSongs()//Podrazbirash konstruktor
    {zaglavie=" ";
    izpulnitel=" ";
    klip=" ";
    godina=0;
    janr=" ";}

    CSongs(string zag,string izp, string kl, int god, string jan)//ekspeciten konstruktor
    {zaglavie=zag;
    izpulnitel=izp;
    klip=kl;
    godina=god;
    janr=jan;}

    CSongs(const CSongs& ToCopy)//kopirash konstruktor
    {zaglavie=ToCopy.zaglavie;
    izpulnitel=ToCopy.izpulnitel;
    klip=ToCopy.klip;
    godina=ToCopy.godina;
    janr=ToCopy.janr;}
    // za zapis
    void setZaglavie(string zag) {zaglavie=zag;}
    void setIzpulnitel(string izp){izpulnitel=izp;}
    void setKlip(string kl){klip=kl;}
    void setGodina(int god){godina=god;}
    void setJanr(string jan){janr=jan;}
    // za chetene
    string getZaglavie(){return zaglavie;}
    string getIzpulnitel(){return izpulnitel;}
    string getKlip(){return klip;}
    int getGodina(){return godina;}
    string getJanr(){return janr;}

    friend ostream& operator << (ostream& toStream, const CSongs& obj);// za chetene ot potoka
    friend istream& operator >> (istream& fromStream, CSongs& obj); // za izvejdane v potoka

    int vuzrast()//izchislqva vazrasta na pesnite
    {return 2017 - getGodina();}


    void print()//za izvejdane na dannite za pesnite
    {cout<<"\nЗаглавие: "<<zaglavie<<endl;
    cout<<"Изпълнител: "<<izpulnitel<<endl;
    cout<<"Клип: "<<klip<<endl;
    cout<<"Година: "<<godina<<endl;
    cout<<"Жанр: "<<janr<<endl;}


    CSongs& operator = (const CSongs& obj)// operator za prisvoqvane
    {this->zaglavie=obj.zaglavie;
    this->izpulnitel=obj.izpulnitel;
    this->klip=obj.klip;
    this->godina=obj.godina;
    this->janr=obj.janr;
    return *this;}

    bool PesniKlip()//funkciq dali pesenta ima klip
    {
        if(klip == "Da")
            return true;
        else
            return false;
    }

    bool operator == (const CSongs& obj) const// operator za savpadenie
    {return this->izpulnitel == obj.izpulnitel;}

    bool operator < (const CSongs& obj) const // za sravnenie
    {return this->zaglavie < obj.zaglavie;}


    static int eqIzpulnitel(const CSongs& obj1, const CSongs& obj2)// funkciq za sravnenie na dva obekta
    {return obj1.zaglavie == obj2.zaglavie;}
};

ostream& operator << (ostream& toStream, const CSongs& obj)
{toStream<<obj.zaglavie<<" "<<obj.izpulnitel<<" "<<obj.klip<<" "<<obj.godina<<" "<<obj.janr<<endl;
return toStream;}

istream& operator >> (istream& fromStream, CSongs& c)
{fromStream>>c.zaglavie>>c.izpulnitel>>c.klip>>c.godina>>c.janr;
return fromStream;}

class CStudio : public CSongs
{
private:

    string studio;
    int BroiAlbumi;
    double prihodi;
public:
    CStudio(string zag,string izp, string kl, int god, string jan,string c_Studio,int c_BroiAlbumi,double c_Prihodi): CSongs(zag,izp,kl,god,jan)
    //ekspleciten konstruktor
    {
    studio=c_Studio;
    BroiAlbumi=c_BroiAlbumi;
    prihodi=c_Prihodi;}

    CStudio(){}//podrazbirash

    CStudio(const CStudio& c)//kopirash 
    {
     zaglavie=c.zaglavie;
     izpulnitel=c.izpulnitel;
     klip=c.klip;
    godina=c.godina;
    janr=c.janr;

     studio=c.studio;
     BroiAlbumi=c.BroiAlbumi;
     prihodi=c.prihodi;}

    int getBroiAlbumi()//vrashta broq na albumite
    {return BroiAlbumi;}

    string getStudio()//vrashta imeto na studioto
    {return studio;}

    double getPrihodi()// vrashta prihodite 
    {return prihodi;}

    bool Album()//presni koito albumi sa po golemi ot 1 
    {   if(BroiAlbumi > 1)
            return 1;
        else 
            return 0;}
    
};

vector<CStudio> st_vec;

void Pesni()
{ofstream file;
file.open("file.txt",ios::out);//sazdavame fail
vector<CStudio>::iterator it;//iterator za posledovatelen dostap na elementite 
for(it=st_vec.begin();it!=st_vec.end();it++)// obhojdame vektora
    {if((*it).getBroiAlbumi() > 20)//namira studiqta s albumi po golemi ot 20
       {   
          file<<"Студио: "<<(*it).getStudio()<<" брой песни: "<<(*it).getBroiAlbumi()<<" Приходи: "<<(*it).getPrihodi()<<endl;
          cout<<"Студио: "<<(*it).getStudio()<<" брой песни: "<<(*it).getBroiAlbumi()<<" Приходи:"<<(*it).getPrihodi()<<endl;
        }
    }
file.close();
}
 
void album()
{vector<CStudio>:: iterator it;//iterator za posledovatelen dostap na elementite
vector<CStudio>:: iterator it2;//iterator za posledovatelen dostap na elementite
vector <CStudio> res;//vektor koito savranqva krainiq rezultat

sort(st_vec.begin(), st_vec.end());//sortira vektora st_vec
it2 = st_vec.begin();
for (it=st_vec.begin();it != st_vec.end();it++)//obhojdame vektora
   {
       it=adjacent_find(it2,st_vec.end());// namira dvoiki povtarqshi se elementa
       if(it == st_vec.end()) //ako nqma povtarqshti se dvoiki prekasva
          {break;}
       else //ako ima
        res.push_back(*it);//vkarva dvoikite v noviq vektor res
        res.push_back(*(it+1));
        it2=it+2;
   }
for(it=res.begin();it!=res.end();it++)//obhojdame vektora
    if((*it).Album())//namira studiqta izdali po nqkolko albuma na edin i sashti izpalnitel
    cout<<"Изпълнител: "<<(*it).getIzpulnitel()<<" Студио: "<<(*it).getStudio()<<endl;
    else
        cout<<"Няма такива студия"<<endl;
}
             

void studio(string studio)
{vector<CStudio> v;//iterator za posledovatelen dostap na elementite
vector<CStudio> v2;//iterator za posledovatelen dostap na elementite
sort(st_vec.begin(),st_vec.end());//sortirame st_vec
unique_copy(st_vec.begin(),st_vec.end(),back_inserter(v),CStudio::eqIzpulnitel);//kopirame unikalnite elementi v nov vektor
set_difference(st_vec.begin(),st_vec.end(),v.begin(),v.end(),back_inserter(v2));//prehvarlqme elementite koito ne se sreshtat v dvata vektora
for(int i= 0; i < v2.size(); i++)// izpalnqvame dokato stignem razmera na vektora
        if(v2.getStudio() == studio)
        cout<<v2.getZaglavie()<<" - "<<v2.getIzpulnitel()<<endl;
        else    
            cout<<"Няма такива песни"<<endl;
}


void studia()
{vector<CStudio>::iterator it;//iterator za posledovatelen dostap na elementite
for(it=st_vec.begin();it != st_vec.end();it++)//obhojdame vektora
    if((*it).getBroiAlbumi() == 1)//namira studiqta s unikalni albumi
       cout<<"Студио: "<<(*it).getStudio()<<" Брой албуми: "<<(*it).getBroiAlbumi()<<" Приходи: "<<(*it).getPrihodi()<<endl;
}

void janr(string janr)
{vector<CStudio>::iterator it;//iterator za posledovatelen dostap na elementite
for(it=st_vec.begin();it != st_vec.end();it++)//obhojdame vektora
    if((*it).getJanr()==janr && (*it).vuzrast() == 3)//namirat pesnite izdadeni predi 3 godini
        cout<<"Студио: "<<(*it).getStudio()<<" "<<endl;
}

int main()
{setlocale(LC_ALL, "BGR");
    //sazdavame obekti i gi vkarvame vav vektora st_vec
CStudio obj1("Toxic","100 Kila","Da",2017,"Rap","Jabulah Entertainment",43, 5000);
CStudio obj2("Losh ili dobar","Krisko","Ne",2017,"Rap"," Adamand Records",15, 2500);
CStudio obj3("OET","Krisko","Ne",2015,"Rap","Facing The Sun",20, 2500);
CStudio obj4("Rodena takava","Dara","Da",2012,"Rock","Virginia Records",1, 1000);
CStudio obj5("Vdigam level","Pavell & Venci Venc","Da",2014,"Pop","Sun Records",20, 2000);
CStudio obj6("Tam","Veselin Naidenov","Ne",2010,"Pop","Painer",15,500);
CStudio obj7("Vdigam level","Pavell & Venci Venc","Da",2012,"Pop","Sun Records",20,2000);
CStudio obj8("Bez teb","Preslava","Da",2013,"Pop-folk","Payner",60,5000);
CStudio obj9("Tipichno"," F.O","Da",2008,"Rap","FL Records",25,2830);
CStudio obj10("Body"," Dimchou ","Da",2016,"Rap","Zanimation",55,4500);
st_vec.push_back(obj1);
st_vec.push_back(obj2);
st_vec.push_back(obj3);
st_vec.push_back(obj4);
st_vec.push_back(obj5);
st_vec.push_back(obj6);
st_vec.push_back(obj7);
st_vec.push_back(obj8);
st_vec.push_back(obj9);
st_vec.push_back(obj10);
int choice;
do
{    
    cout<<endl;
    cout<<"\n                                  Меню    \n"<<endl;
    cout<<"1.Извеждане на данните във файл за студия с брой песни над 20"<<endl;
    cout<<"2.Студия, който са издали по няколко албума на един и същи изпълнител"<<endl;
    cout<<"3.Песни, повтарящи се в студиото на изпълнителя"<<endl;
    cout<<"4.Студио издали 1 път албум "<<endl;
    cout<<"5.Студия издали песни преди 3 години"<<endl;
    cout<<"6.Изход"<<endl;
    cout<<endl;
    cout<<"Въведете вашият избор: ";
    cin>>choice;
    switch (choice)
    {
        case 1: Pesni();break;
        case 2: album();break;
        case 3: studio("Sun Records");break;
        case 4: studia();break;
        case 5: janr("Pop");break;
    }
}while(choice!=6);
return 0;}
 

Където е червено там е проблема. Ако някой може да ми помогне как да ги достъпя.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

За да можеш да работиш с private членове трябва да дефинираш методи за достъп до тях. Private членовете не са директно достъпни в наследника. Има 3 спецификатора - private, protected и public. Protected ти позволява да достъпиш от наследниците членовете на класа родител.
Кодът ти е много зле форматиран. Оправи го да стане четим.

Редактирано от simtech (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

От наследник не може да достъпваш private порменливи, направи ги protected

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.