2014-09-03 45 views
-4

我需要为此代码创建一个头文件。我如何为这段代码创建一个头文件?

#include "iostream" 
using namespace std; 
#include <string> 
#include <vector> 
#include <algorithm> 

class persoana { 
private: 
    string nume; 
    int an_nastere; 
    char sex; 

public: 
    persoana() { 
     string nume; 
     cout << "Nume: "; 
     cin.ignore(); 
     getline(cin, nume); 
     set_nume(nume); 
     int an_nastere; 
     cout << "An nastere: "; 
     cin >> an_nastere; 
     set_an_nastere(an_nastere); 
     char sex; 
     cout << "Sex: "; 
     cin >> sex; 
     set_sex(sex); 
    } 
    ~persoana() {} 

    string get_nume() const { return nume; } 
    void set_nume(string nume_nou) { 
     if (nume != nume_nou) { 
      nume = nume_nou.c_str(); 
     } 
    } 
    int get_an_nastere() const { return an_nastere; } 
    void set_an_nastere(int an_nastere_nou) { 
     if (an_nastere != an_nastere_nou) 
      an_nastere = an_nastere_nou; 
    } 
    char get_sex() const { return sex; } 
    void set_sex(char sex_nou) { 
     if (sex != sex_nou) 
      sex = sex_nou; 
    } 
}; 

ostream& operator<<(ostream& out, const persoana& p) { 
    return out << p.get_nume() << " - " << p.get_an_nastere() << " - " 
       << p.get_sex() << endl; 
} 

bool dupa_nume(persoana* p1, persoana* p2) { 
    return (p1->get_nume() < p2->get_nume()); 
} 
bool dupa_varsta(persoana* p1, persoana* p2) { 
    return (p1->get_an_nastere() > p2->get_an_nastere()); 
} 

class baza_de_date { 
private: 
    vector<persoana*> vector_persoane; 
    int n; 

public: 
    baza_de_date(){}; 
    baza_de_date(int dim) { 
     if (dim > 0) { 
      n = dim; 
      vector_persoane.reserve(n); 
     } 
    } 
    ~baza_de_date() { 
     for (int i = 0; i < vector_persoane.size(); i++) 
      delete vector_persoane[i]; 
     vector_persoane.clear(); 
    } 
    void inserare() { vector_persoane.push_back(new persoana()); } 
    void afisare() { 
     for (int i = 0; i < vector_persoane.size(); i++) 
      cout << *vector_persoane[i]; 
    } 
    void eliminare(string nume) { 

     vector<persoana*>::iterator it; 
     for (it = vector_persoane.begin(); it != vector_persoane.end();) { 
      if ((*it)->get_nume() == nume) { 
       delete *it; 
       it = vector_persoane.erase(it); 
      } else 
       ++it; 
     } 
    } 
    void eliminare(int an_nastere) { 
     vector<persoana*>::iterator it; 
     for (it = vector_persoane.begin(); it != vector_persoane.end();) { 
      if ((*it)->get_an_nastere() == an_nastere) 
       it = vector_persoane.erase(it); 
      else 
       ++it; 
     } 
    } 
    void eliminare(char sex) { 
     vector<persoana*>::iterator it; 
     for (it = vector_persoane.begin(); it != vector_persoane.end();) { 
      if ((*it)->get_sex() == sex) 
       it = vector_persoane.erase(it); 
      else 
       ++it; 
     } 
    } 
    void sortare_dupa_nume() { 
     sort(vector_persoane.begin(), vector_persoane.end(), dupa_nume); 
    } 
    void sortare_dupa_varsta() { 
     sort(vector_persoane.begin(), vector_persoane.end(), dupa_varsta); 
    } 
}; 

int main() { 
    baza_de_date bd; 
    int o; 
    do { 
     system("cls"); 
     bd.afisare(); 
     cout << "\n1.Adauga persoana\n2.Elimina persoana dupa nume\n3.Elimina " 
       "persoana dupa anul nasterii\n4.Elimina persoana dupa " 
       "sex\n5.Afiseaza dupa nume\n6.Afiseaza dupa " 
       "varsta\n0.Iesire\nOptiunea: "; 
     cin >> o; 
     switch (o) { 
      case 1: { 
       bd.inserare(); 
      } break; 

      case 2: { 
       string nume; 
       cout << "Nume: "; 
       cin.ignore(); 
       getline(cin, nume); 
       bd.eliminare(nume); 
      } break; 

      case 3: { 
       int an_nastere; 
       cout << "An nastere: "; 
       cin >> an_nastere; 
       bd.eliminare(an_nastere); 
      } break; 

      case 4: { 
       char sex; 
       cout << "Sex: "; 
       cin >> sex; 
       bd.eliminare(sex); 
      } break; 

      case 5: { 
       bd.sortare_dupa_nume(); 
      } break; 

      case 6: { 
       bd.sortare_dupa_varsta(); 
      } break; 
     } 
    } while (o); 

    return 0; 
} 
+0

您好。欢迎来到Stack Overflow。当你想知道的是,如何为课堂创建标题只是噪音,而且很可能会吸引低估和紧密的投票。是你的问题所需的所有代码?不可以。您应该发布由虚拟类和虚拟函数组成的最小代码,然后您应该将答案外推至您的真实代码。看到@BrianCain给你的答案?只需要代表他的观点的最低限度的代码。你的问题应该看起来类似。 – bolov 2014-09-03 18:32:41

回答

2

您必须将类的实现从其接口中分离出来。该过程与C完成的过程类似,但复杂度稍高。

总之,到处都有一对花括号,你需要用分号代替。您还必须将源代码转换为合格。

下面是遵循的模式。考虑每个头/源对的一个类,但这不是一个固定的规则。

头:

class baza_de_date 
{ 
private: 
vector<persoana*> vector_persoane; 
int n; 
public: 
baza_de_date(); 
baza_de_date(int dim); 
// ... 
}; 

源:

#include "baza.h" 

baza_de_date::baza_de_date(int dim) 
{      
    if (dim>0) 
    { 
     n=dim; 
     vector_persoane.reserve(n); 
    } 
} 
+0

分离代码定义(cpp)和声明(.h)不是一种'必须做的'语言,但是由于各种原因,它是更好的选择。 – user3791372 2014-09-03 18:14:03

+0

非常感谢你! – tidusanddante 2014-09-03 18:16:54

+0

@ user3791372,上下文是“我需要为这个代码创建一个头文件”,所以答案是“[为了做到这一点]你必须将...实现从它的接口中分离出来”。 – 2014-09-03 20:11:11