Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Klasa w pliku *.h

Ostatnio zmodyfikowano 2009-09-05 17:07
Autor Wiadomość
malan
Temat założony przez niniejszego użytkownika
Klasa w pliku *.h
» 2009-09-04 23:05:36
Witam.
Ostatnio stwierdziłem, że nie podobają mi się klasy (czy struktury) w pliku *.cpp (wole je mieć w jednym miejscu), więc kombinowałem, kombinowałem i wykombinowałem to:
C/C++
#ifndef TEST_H
#define TEST_H

namespace
{
    class OperacjeMatematyczne
    {
    public:
       
        int skladnik1, skladnik2;
        int odjemna, odjemnik;
       
        int Dodaj_dwie_liczby( void );
        int Odejmij_dwie_liczby( void );
       
    };
   
    int OperacjeMatematyczne::Dodaj_dwie_liczby( void )
    {
        return( skladnik1 + skladnik2 );
    }
   
    int OperacjeMatematyczne::Odejmij_dwie_liczby( void )
    {
        return( odjemna - odjemnik );
    }
   
}

#endif
C/C++
//Plik *.cpp
#include <iostream>
#include <conio.h>
#include "Test.h"

int main()
{
    OperacjeMatematyczne Obiekt;
   
    std::cout << "Podaj liczbe 1: ";
    std::cin >> Obiekt.skladnik1;
   
    std::cout << "Podaj liczbe 2: ";
    std::cin >> Obiekt.skladnik2;
   
    std::cout << "Podaj liczbe 3: ";
    std::cin >> Obiekt.odjemna;
   
    std::cout << "Podaj liczbe 4: ";
    std::cin >> Obiekt.odjemnik;
   
    std::cout << Obiekt.skladnik1 << " + " << Obiekt.skladnik2 << "= " << Obiekt.Dodaj_dwie_liczby() << std::endl;
    std::cout << Obiekt.odjemna << " - " << Obiekt.odjemnik << "= " << Obiekt.Odejmij_dwie_liczby();
   
    getch();
    return 0;
}
Teraz tylko nie do końca wiem, czy tak można robić, czy nie jest to błąd. Mógłby mnie ktoś oświecić ? ;)
P-10062
pompom
» 2009-09-05 00:03:14
Z punktu widzenia kompilatora nie ma różnicy, include przecież po prostu wstawia plik przed kompilacją.
Jeśli się da, należy oddzielić kod od deklaracji - jest mniejszy bałagan i kompilacja jest szybsza (kompilują się tylko te pliki .cpp, w których coś zmieniłeś).
I tak z 10% klas musi być w pliku nagłówkowym, ze względu na olanie części standardu przez praktycznie wszystkie kompilatory...

P.S. Jak piszesz małe rzeczy, nie dziel niepotrzebnie na pliki, tylko pisz wszystko w jednym. Dopiero jak coś się zacznie robić za duże to wydziel.
P-10063
DejaVu
» 2009-09-05 00:05:06
Z praktycznego punktu widzenia kod w *.cpp ma duże zalety - np. zmiana pliku *.cpp powoduje tylko i wyłącznie jego przebudowanie. Zmiana pliku *.hpp powoduje przekompilowanie wszystkich plików zależnych od niego :)
P-10064
malan
Temat założony przez niniejszego użytkownika
» 2009-09-05 16:25:23
P.S. Jak piszesz małe rzeczy, nie dziel niepotrzebnie na pliki, tylko pisz wszystko w jednym
Wiem, wiem ;). To jest tylko taki przykład.

@Piotr Szawdyński: No dobrze, ale jeśli stworzę sobie klasę w pliku *.cpp, a będę potrzebował np. funkcji Dodaj_dwie_liczby(void) w innym pliku źródłowym to co wtedy ? Przecież nie dodam *cpp. Teraz właśnie kończę taki dość rozbudowany projekt w allegro i mam tam kilka plików źródłowych. W pewnym momencie potrzebowałem pewnej struktury, która była właśnie w pliku *.cpp, a że nie wiem czy są jakieś sposoby żeby poinformować kompilator (program), że struktura znajduje się w innym pliku to napisał to jeszcze raz ;p. Gdybym miał tę strukturę w pliku np. struktury.h to wystarczyłoby include "struktury.h" i po kłopocie.

Dodam jeszcze tylko, że ten plik Test.h nie chce się kompilować. Muszę zapisywać zmiany metodą "Plik -> Save" ;p.
P-10081
malan
Temat założony przez niniejszego użytkownika
» 2009-09-06 14:37:05
No tak, ale jeśli funkcja jest zadeklarowana w jakieś klasie to nic to nie da, bo definicję funkcji musiałbym mieć w tym samym pliku co klasa (*.cpp).

Temat uważam za rozwiązany - dzięki ;).
P-10090
manfred
» 2009-09-05 17:07:06
Jeśli do headera wrzuciłbyś same deklaracje, a do cpp definicje, to mógłbyś używać funkcji w wielu plikach...
P-19281
« 1 »
  Strona 1 z 1