Proszę o przykład przekształcenia kodu nie obiektowego na obiektowy tego samego problemu w C++.W ogóle tego nie rozumiem, a chce zrozumieć. Muszę widzieć kody żeby to zrozumieć.
Muszę widzieć kody żeby to zrozumieć.
A pokaż to źródło z którego się uczysz i które nie pokazuje przykładów? Musisz też doprecyzować co konkretnie chcesz zrozumieć, obiektowy kod
to bardzo szerokie pojęcie. Jeśli odpowiesz wszystko
to z góry uprzedzam, że wątpię żeby ktoś Ci tutaj pisał kurs programowania obiektowego w formie odpowiedzi na forum.
Kod obiektowy nie musi być napisany obiektowo.
Polecam:
https://www.amazon.com/Refactoring-Patterns-Joshua-Kerievsky/dp/0321213351
https://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Signature/dp/0134757599
https://www.amazon.pl/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052
Marta Długa napisał(a):
Proszę o przykład przekształcenia kodu nie obiektowego na obiektowy tego samego problemu w C++.W ogóle tego nie rozumiem, a chce zrozumieć. Muszę widzieć kody żeby to zrozumieć.
Moim zdaniem przeskok z proceduralnego na obiektowy NIE JEST CZYTELNY z samego kodu.
Bez kawałka teorii nie da rady.
Trzeba problem (zagadnienie) już u fundamentów przemyśleć w odmienny sposób.
Obok, w Javie, jest temat o w zasadzie identycznym tytule.
Inicjator zrozumiał tyle, że ma jak krowa ma nawalić placki tu i tam, tzn class
No niestety, to nie jest programowanie obiektowe
Przykład wyjęty z przysłowiowej d**y, ale jest przekształcenie:
void print_person_data(std::string name, stad::string lastname)
{
std::cout << name << " " << lastname << std::endl;
}
class Person
{
private:
std::string name;
std::string lastname;
public:
Person(std::string name, std::string lastname)
:name(name), lastname(lastname){}
void print()
{
std::cout << this->name << " " << this->lastname << std::endl;
}
};
auto f(int x) {
return [x] (int y) { return x + y; };
}
należy przekształcić na
class f {
int x;
public:
f(int x) : x(x) {}
int operator()(int y) { return x + y; }
};
Jak widać, zupełnie to nie ma sensu, wersja obiektowa wymaga pisanie dużo kodu, który w alternatywnym stylu (domknięcia) w ogóle nie jest potrzebny.
Przykład z "Hello world!" Jeżeli chcesz "to zrozumieć" i nauczyć się to przerób kod na to co zaproponował "Eldorad O" na klasę "class Person"
Zajrzyj też, na poniższe strony
https://www.p-programowanie.pl/cpp/konstruktory
https://cpp0x.pl/kursy/Programowanie-obiektowe-C++/486
https://edu.pjwstk.edu.pl/wyklady/pro/scb/PRG2CPP_files/PRG2CPP.html
#include <iostream>
using namespace std;
class HelloWorld
{
private:
string sentence;
public:
// default constructor - konstruktor domyslny
HelloWorld()
{
sentence = "Hello World!";
}
// parameterized constructor
HelloWorld(const string & n):sentence(n) {}
// method
void print()
{
cout << this->sentence << endl;
}
friend ostream& operator<<(ostream & os, const HelloWorld & s)
{
os << s.sentence;
return os;
}
// class destructor
~HelloWorld() {}
};
// print function
void print(string s)
{
cout << s << endl;
}
int main()
{
// klasycznie
string expression;
cout << "\nPodaj wlasna sentencje: ";
getline(cin, expression);
print(expression); // call the print function
// objektowo
cout << HelloWorld(expression); // call the parameterized constructor
cout << "\n";
cout << HelloWorld(); // call the default constructor
cout << "\n";
HelloWorld phrase("Hello world!"); // create object
cout << phrase << endl; // call friend ostream& operator<<
phrase.print(); // method print
getchar();
return 0;
}