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

Obiekty - mam problem :/

Ostatnio zmodyfikowano 2009-01-25 09:01
Autor Wiadomość
Tival
Temat założony przez niniejszego użytkownika
Obiekty - mam problem :/
» 2008-12-30 19:56:40
Witam chce się nauczyć programowania obiektowego ale jakoś tego nie rozumiem... próbuje napisać jakiś mini programik ale także nie mogę daje kod:

C/C++
#include <conio.h>
#include <iostream>
#include <string.h>
using namespace std;

class mama
{
public:
    string imie = "Adam";
   
private:
    int x = 100;
    int y = 100;
   
};

int main()
{
   
    mama poka;
   
    cout << "Twoje imie to: " << poka.imie;
   
    getch();
   
    return 0;
}

Nie śmiać się z nazw :D

Co w tym kodzie jest zle?? mam bledy przy kompilacji:

9 C: \Dev-Cpp\main.cpp ISO C++ forbids initialization of member `imie'
9 C: \Dev-Cpp\main.cpp making `imie' static
9 C: \Dev-Cpp\main.cpp invalid in-class initialization of static data member of non-integral type `std::string'
12 C: \Dev-Cpp\main.cpp ISO C++ forbids initialization of member `x'
12 C: \Dev-Cpp\main.cpp making `x' static
12 C: \Dev-Cpp\main.cpp ISO C++ forbids in-class initialization of non-const static member `x'
13 C: \Dev-Cpp\main.cpp ISO C++ forbids initialization of member `y'
13 C: \Dev-Cpp\main.cpp making `y' static
13 C: \Dev-Cpp\main.cpp ISO C++ forbids in-class initialization of non-const static member `y'
 C: \Dev-Cpp\main.cpp In function `int main()':
22 C: \Dev-Cpp\main.cpp 'class mama' has no member named 'imie'

 C: \Dev-Cpp\Makefile.win [Build Error]  [main.o] Error 1  <--- klasyczna linijka
P-3087
DeBugger
» 2008-12-30 20:49:11
Doszłem do czegoś takiego(zaraz zlikwiduję statiki):
C/C++
#include <conio.h>
#include <iostream>
#include <string>
using namespace std;

class mama
{
public:
    static string imie;
   
private:
    static int x;
    static int y;
   
};
string mama::imie = "Adam";
int mama::x = 100;
int mama::y = 100;
int main()
{
   
    mama poka;
   
    cout << "Twoje imie to: " << poka.imie;
   
    getch();
   
    return 0;
}
P-3088
DeBugger
Zmienne klasy z użyciem konstruktora
» 2008-12-30 20:53:37
C/C++
#include <conio.h>
#include <iostream>
#include <string>
using namespace std;

class mama
{
private:
    int x;
    int y;
   
public:
    string imie;
    mama();
   
};
mama::mama()
{
    x = 100;
    y = 100;
    imie = "Adam";
}
int main()
{
   
    mama poka;
   
    cout << "Twoje imie to: " << poka.imie;
   
    getch();
   
    return 0;
}
Poczytaj dział o konstruktorach.
P-3089
DeBugger
Wyjaśnienie
» 2008-12-30 20:59:40
Dane tylko deklarujesz w ciele klasy, a możesz nadać im wartość np. w konstruktorze.
P-3091
GoldWolf
» 2008-12-31 12:33:06
Tu nawet o konstruktory nie chodzi nie masz metody dla tej klasy.

Zdeklarowałeś klasę ale brak jej metod. Konstruktory sobie na razie zostaw, musisz nauczyć się poprawnie tworzyć klasę i metody dla tej klasy.
P-3104
DejaVu
» 2008-12-31 12:41:48
Siłą rzeczy tworzenie konstruktorów w klasach powinno być na porządku dziennym. Prawdopodobieństwo, że w klasie nie będzie zmiennych lub nie będą musiały być zainicjowane w celu prawidłowego funkcjonowania klasy jest bliskie zeru :) Tak więc konstruktory są nieodłączną częścią nauki programowania obiektowego.
P-3105
GoldWolf
» 2008-12-31 17:40:08
Zgodzę się z tobą całkowicie ale kompilator tworzy konstruktory domyślne i jeżeli ktoś (tak jak ja) nie opanował jeszcze klasy to nie musi na razie się nimi przejmować. Konstruktory, a co za tym idzie i destruktory, o nie na razie zadba kompilator.

Ja bym zaczął najpierw od próby tworzenia klas i metod by zrozumieć jak to się je.
Na konstruktory przyjdzie czas, sam ich jeszcze nie używam. Nie muszą Ci na razie śmietnika z głowy robić, chociaż jak je dobrze poznasz to na pewno staną się bardzo użyteczne.
P-3128
GoldWolf
» 2009-01-24 19:07:18
Przykro mi, że tak późno ale mogło by to tak wyglądać:

C/C++
//--------------------------------------------------------
/*#include <vcl>  to jest związane z borlandem więc możesz to ominąć
#pragma hdrstop
//------------------------------------------------------------------------
#pragma argsused */
#include <conio.h>
#include <iostream>
#include <string>
using namespace std;

//klasa
class mama {
    int x, y; //domyślnie zmienne prywatne
   
public:
    void inicjuj();
};
// metody klasy
void mama::inicjuj() {
    x = 100;
    y = 100;
   
    string imie = "Adam";
    cout << " Twoje imie to " << imie << endl;
};
int main() {
    mama test;
    test.inicjuj();
   
    system( "pause" );
}

//---------------------------------------------------------------------------
P-3908
« 1 » 2
  Strona 1 z 2 Następna strona