2014-09-03 2 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

안녕하세요. 스택 오버플로에 오신 것을 환영합니다. 모든 것을 알고 싶을 때 전체 코드를 덤프하는 것은 클래스의 헤더를 작성하는 것입니다. 단지 노이즈 일 뿐이며 downvotes 및 close vote를 유치 할 가능성이 큽니다. 귀하의 질문에 필요한 모든 코드가 있습니까? 아니오. 더미 클래스와 더미 함수로 구성된 최소 코드를 게시해야합니다. 그런 다음 실제 코드에 대한 해답을 추정해야합니다. @ BrianCain이 준 답변을 보시겠습니까? 요점을 나타내는 데 필요한 최소한의 코드 만 있습니다. 귀하의 질문은 유사해야합니다. – bolov

답변

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

+0

대단히 감사합니다 !! – tidusanddante

+0

@ user3791372에서 컨텍스트는 "이 코드의 헤더 파일을 만들어야합니다."라는 대답을주었습니다. "답변을하기 위해서는 ... 구현을 인터페이스와 분리해야합니다". –

관련 문제