Co to jest klasa?

0

Witam.
Jestem początkujący w programowaniu... na razie uczę się samych podstaw c oraz trochę Cpp... czytam różne źródła i denerwuje mnie to, że ciągle jest mowa o jakiś klasach a ja, wstyd się przyznać, nie wiem co to... próbowałem oczywiście czytać o tym... jakieś programowanie obiektowe i wgl ;) ale jakoś nie zrozumiałem zbytnio... Byłby ktoś tak miły i wytłumaczył mi, jak krowie na granicy, co to mniej więcej jest? :D

1

klasa to np. pies jako gatunek (Canis lupus familiaris).
obiekt danej klasy, instancja danej klasy to np. pies Azor albo suka Sonia.

czyli klasa to taki jakby typ obiektu.

1

Niedorozwinięta proteza dla samego uzmysłowienia:

#include <iostream>
#include <string>
using namespace std;

//<cheats>
#define __attribute__(classname, instancename, attrname) \
    __##classname##__##instancename##__##attrname##__
//</cheats>

#define __person__attr__(instancename, attrname) \
    __attribute__(person, instancename, attrname)

#define person_name(self) \
    __person__attr__(self, name)

#define person_age(self) \
    __person__attr__(self, age)

#define spawn_person(self) \
    string person_name(self); \
    int person_age(self);

//na potrzeby ulatwienia Ci zycia - pieprzyc referencje i tak dalej
void print_person(string name, int age) {
    cout << "name: " << name << ", age: " << age << endl;
}

int main() {
    spawn_person(FirstPerson);
    spawn_person(SecondPerson);

    cin >> person_name(FirstPerson) >> person_age(FirstPerson);
    cin >> person_name(SecondPerson) >> person_age(SecondPerson);

    print_person(person_name(FirstPerson), person_age(FirstPerson));
    print_person(person_name(SecondPerson), person_age(SecondPerson));
    return 0;
}

Wprowadzając pojęcie struktury (czyli de facto klasy):

#include <iostream>
#include <string>
using namespace std;

struct person {
    string name;
    int age;
};

person load_person() {
    person result;
    cin >> result.name >> result.age;
    return result;
}

void print(person p) {
    cout << "name: " << p.name << ", age: " << p.age << endl;
}

int main() {
    person p1 = load_person(), 
           p2 = load_person();

    print(p1);
    print(p2);
}

http://ideone.com/d9UKzW

Dalej:

#include <iostream>
#include <string>
using namespace std;

struct person {
    string name;
    int age;

    friend istream &operator>>(istream &in, person &p) {
        return cin >> p.name >> p.age;
    }

    friend ostream &operator<<(ostream &out, person const &p) {
        return cout << "name: " << p.name << ", age: " << p.age;
    }
};

int main() {
    person p1, p2;
    cin >> p1 >> p2;
    cout << p1 << endl << p2 << endl;
}

To tak na początek.

1
  1. Technicznie to jest definicja własnego, złożonego "typu danych"
  2. W wielu sytuacjach jest to też okreslenie pewnej jednostki kodu poniżej biblioteki a powyżej funkcji. Bo nie każda klasa, szczególnie np. w Javie czy C#, opisuje realny obiekt z dziedziny problemu.
1

https://www.udacity.com/cours[...]oundations-with-python--ud036
Przejdź sobie przez ten kurs. Autor dość dokładnie przedstawia czym jest i na czym polega programowanie obiektowe. A klasa jest jednym z kluczowych elementów tego zagadnienia.

W dużym skrócie (analogia do psa, który jest świetnym przykładem):

Jest sobie klasa Pies().
Pies() może szczekać, wtedy robi "hau"
Pies() może spać, wtedy ma stan "sen"
Pies() może lizać się po jajkach, wtedy ma stan "rest"

Ustalamy, że Azor jest przestawicielem (obiektem) klasy Pies() [czyli np. Azor = Pies()]
W tym momencie poprzez wpisanie odpowiedniej wartości sprawiamy, że Azor może wykonać wszystkie czynności które może zrobić pies.

Prościej się nie da. Pooglądaj kurs.

1

Dzięki za wszystkie odpowiedzi! :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0