C++ vs Object Pascal po raz kolejny, ale jednak nieco inacze

0

Tak sie zlozylo ze bede musial nieco poprogramowac w czyms co jest okrojonym C. Wiec sobie czytam dzielo p.t. Standard C++ Bible, zeby sie polapac. I tak sobie czytam (na razie wstepne rozdzialy) i nie moge dojsc czym tak naprawde C++ rozni sie od Object Pascala. Mam oczywiscie na mysli roznice zasadnicze, a nie begin..end vs. {}. Wiekszosc struktur jezyka wydaje sie podobna jesli nie identyczna.

Pewne triki w C (np operatory +=, ? :) zapewne skracaja czas pisania programu, choc moga obnizac czytelnosc. Czy maja wplyw na wydajnosc samego programu? Chyba niekoniecznie, bo roznica miedzy funkcja a operatorem jest zatarta przez kompilator, ktory liczne funkcje (rowniez w Delphi) traktuje jako inline - a wiec de facto operatory.

W C zauwazam wieksza swobode w deklarowaniu zmiennych: np deklaracja polaczona z inicjalizacja, deklaracja w praktycznie dowolnym miejscu kodu. Ale czy to znow nie obniza czytelnosci?

Zreszta w Delphi tez mozna uzyc deklaracji polaczonej z incjalizacja, tyle ze nazywa sie to 'assignable typed constant' (ale, jak przyznaje help, they behave essentially like initialized variables), no i trzeba przestawic kompilator:
{$J+}
//=Project&gtOptions&gtCompiler&gtAssignable typed constants
const
x : integer = 100;
begin
inc(X); *dziala!!!
Button1.Caption:=IntToStr(X); *wychodzi 101
end;

Inna specyficzna cecha C, ktora zauwazylem, sa zmienne lokalne dla bloku {}.
Czyli

int k = 1;
if(k == 1)
{
int k = 5; * to jest inne k
}

  • wiec tu k nadal jest rowne 1

Ale powiedzmy sobie szczerze: nazywanie roznych zmiennych znajdujacych sie tak blisko siebie w kodzie takimi samymi nazwami to prosta droga to pomylki i ciezkiego do znalezienia bledu.

Wiec pytanie do ludzi, ktorzy naprawde dobrze znaja oba jezyki. Gdzie jest zasadnicza roznica?
--Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

0

Hehe no wlasnie gdzie te wielkie roznice? Polecam do poczytania ten topic :
http://warsztat.pac.pl/cgi-bin/forum/YaBB.cgi?board=general;action=display;num=1020956040;start=0--W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi.

0
  1. Jeśli chodzi o szablony (template) to tak naprawde to pisząc konkretny program
    pod winem w ogóle tego nie zastosujesz.
  2. Bardzo poważna wada delphi lub object pascala (nie wiem) to brak oparcia na zasobach, co za tym idzie rozmiar plików.
  3. Przeciążenie operatorów jest pomocne jak piszesz własne klasy, w konkretnym programie możesz zrobić zwykłą funkcje.
  4. W C++ bardzo ułatwiają życie standardowe biblioteki typu lista,stos,kolejka itp.
    Szkoda że delphi tego nie ma, choć można zrobić własną klase.
  5. Brak w C++ pętli do..witch która jest pomocna jak masz doczynienia z
    komponentami.
  6. W C++ łatwiej operować wskaznikami.
0

Co do tablic w VC++ też można twożyć tablice od dowolnego miejsca, tylko po co?
Argument że C++ jest lepszy bo jest bliższy systemowi jest ŚMIESZNY.
Co użytkownika obchodzi w jakim języku został napisany program którego używa.
Program ma chodzić i tyle. To że programista ma takie " widzimisie" a nie inne to
kwestia gustu.

Jak dla mnie to żadnych różnic.
Jest takie przysłowie o baletnicy...

0

znowu ja.
Deklaracja zmiennych w dowolnym miejscu cholernie ułatwia.

0

marcin napisał:
znowu ja.
&gtDeklaracja zmiennych w dowolnym miejscu cholernie ułatwia.

Pisanie z cala pewnoscia. Ale czy czytanie??--Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

0

Zalety deklaracji zmiennych w c++ (w zwyklym c nie ma takiej swobody) docenilem gdy piszac przez dluzszy czas w c++ musialem napisac cos w OP. Piszac dluzsza procke meczylo mnie ciagle wracanie do bloku var.
Operatory typu += zniejszaja czytelnosc tylko do pewnego czasu, po prostu kwestia wprawy i wplywow starych przyzwyczjen.
Piszac w delphi nie spotkalem sie takze ze strukturami typu unie czy pola bitowe, w inny sposob sa realizowane lancuchy znakowe. W c++ nie ma dosc sztucznego podzilu na procedury i funkcje,a te ostatnie w inny sposob zwracaja wartosc. W c++ operacje wskaznikowe nie sa ograniczone tylko do zmiennych dynamiczcnych. Lepiej zostaly rozwiazane takze mechanizmy obiektowe (wg mnie przynajmniej).
Slyszalem ze dosc duze roznice sa w sposbie tworzenia kodu wynikowego, ale to moze niech sie wypowie ktos bardziej kompetentny.
Takie detale mozna by wymieniac dosc dlugo ale czy jest sens? Ja odczywam wiekszy komfort i satysfakcje piszac w c++. Ciesze sie ze ty pq musisz "pomeczyc" sie w c. Moze teraz docenisz ten jezk. :-) --Pozdrawiam
Ojciec (Delphi/C++)

0

Ojciec napisał:
Zalety deklaracji zmiennych w c++ (w zwyklym c nie ma takiej swobody) docenilem gdy piszac przez dluzszy czas w c++ musialem napisac cos w OP. Piszac dluzsza procke meczylo mnie ciagle wracanie do bloku var.

Ja wolę mieć wszystkie zmienne w jednym miejscu. Łatwiej mi się zorientować w kodzie (znów większa czytelność).

Operatory typu += zniejszaja czytelnosc tylko do pewnego czasu, po prostu kwestia wprawy i wplywow starych przyzwyczjen.

Zgadzam się. Jak dla mnie zasada tworzenia tego typu operatorów jest prosta, a znacznie przyspieszają pisanie.

Piszac w delphi nie spotkalem sie takze ze strukturami typu unie

W Delphi wykorzystuje się w tym celu Variant.

czy pola bitowe

Mógłbyś dać przykład jak to wygląda? Słabo znam się na C++ (głównie przerabiam kod C++ na Delphi) Może będę wiedział co zastępuje pola bitowe.

W inny sposob sa realizowane lancuchy znakowe.

To zależy. Można stosować zarówno typ string, charakterystyczny dla OP, jak i pchar, WideChar i inne charakterystyczne dla C++.

W c++ nie ma dosc sztucznego podzilu na procedury i funkcje,a te ostatnie w inny sposob zwracaja wartosc.

Jak już ktoś z programujących w C++ napisał, to tylko kwestia nazewnictwa.

W c++ operacje wskaznikowe nie sa ograniczone tylko do zmiennych dynamiczcnych.

Ostatnio pq udowodnił mi, że także obiekty są przekazywane przez wskaźniki.--Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.

Pomoc do Delphi po polsku. http://www.4programmers.net/forum/index.php?action=show&id=21335&c=2

Oficjalny kanał IRC serwisu 4programers:
serwer: warszawa.ircnet.pl sieć: POLNet kanał: #4programmers.net

0

Dzieki wszystkim... Czekam na dalsze opinie i mam nadzieje, ze watek nie przerodzi sie w kolejna klotnie co jest lepsze :))) . Uzupelnienie do Dryobatesa:

&gtW Delphi wykorzystuje się w tym celu Variant.

Dokladniej sie to nazywa rekordem wariantowym. Rekordy wariantowe tworzy sie przy uzyciu case..of wewnatrz rekordu. Typ Variant to chyba troche co innego, choc jego implementacja jest zapewne rekorem wariantowym.

Przegladalem (bo dokladnie czytac mi sie nie chcialo) dalsze rozdzialy wspomnianej wyzej ksiazki i znalazlem kolejna wazna roznice: otoz C++ dopuszcza dziedziczenie klasy po wiecej niz 1 przodku. Autorzy ksiazki, ktorzy sa w ogole bardzo entuzjastyczni do C++, wypowiadaja sie o wielokrotnym dziedziczeniu z pewna rezerwa, jako o mechanizmie bardzo podatnym na bledy.. Ciekaw jestem zdania znawcow C++ na ten temat.

Autorzy z duza ostroznoscia wypowiadaja sie rowniez o przeciazaniu operatorow. Moj stosunek (jesli w ogole mozna mowic o jakims stosunku u osoby znajacej temat nader powierzchownie) jest ambiwalentny. Z jednej strony, dla pewnych klas przeciazone operatory sa dosc naturalne. Autorzy daja przyklad daty, dodawanie np. dni czy miesiecy do dat jest dosc naturalne. Trzeba wiec zrobic przeciazony operator dodawania bo data ma skomplikowana wewnetrzna strukture (dd.mm.yyyy) i co gorsza np przepelnienie dni w miesiacu wystepuje dla roznej liczby dni (28-31) zaleznej od miesiaca, a nawet od roku. Podobnie odejmowanie dat, dajace w wyniku roznice miedzy 2 datami, czy operatory in/dekrementacji sa dosc naturalne. Z drugiej strony, czy zapis Date[1]+Date[2] jest lepszy niz AddDates(Date[1], Date[2])? Date[1]-Date[2] moze dac wynik albo w dniach, albo dniach i miesiacach, albo dniach i miesiacach i latach, i programista nie widzi tego od razu. Funkcje powiedzmy DeltaDays(D1, D2 : Date), DeltaDaysMonths(D1, D2 : Date) itd sa chyba bardziej czytelne (sorry za zapis paskalowy).

No to na razie tyle... Pozdrawiam wszystkich, Pawel

A, i jeszcze do marcina:
biblioteki algorytmow i struktur danych tez wydaja mi sie wazna zaleta C++ (wlasnie dzis o nich przeczytalem).

Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

0

Dryobates napisał:
Ojciec napisał:
&gtZalety deklaracji zmiennych w c++ (w zwyklym c nie ma takiej swobody) docenilem gdy piszac przez dluzszy czas w c++ musialem napisac cos w OP. Piszac dluzsza procke meczylo mnie ciagle wracanie do bloku var.
&gt

ZAJEBISTE spostrzezenie z "zwyklym C" jak to okreslilez zmienne dokladnie tak samo sie deklaruje jak w C++ - zadnej powtarzam ZADNEJ nie ma roznicy

&gtJa wolę mieć wszystkie zmienne w jednym miejscu. Łatwiej mi się zorientować w kodzie (znów większa czytelność).
&gt

tyle ze zmienne zyja do konca programu a nie umieraja np po wyjsciu z petli - znowu DUPA

&gtOperatory typu += zniejszaja czytelnosc tylko do pewnego czasu, po prostu kwestia wprawy i wplywow starych przyzwyczjen.
&gt

zmniejszaja czytelnosc (chyba komus kto zna tylko HTML'a i nie moze sie polapac w nowoczesnych jezykach programowania)

&gtTo zależy. Można stosować zarówno typ string, charakterystyczny dla OP, jak i pchar, WideChar i inne charakterystyczne dla C++.
&gt

GOWNO : C++/C przechowuje napisy jako wskaznik do tablicy znakow, to co ty juz wymieniles to so klasy ktore opakowuja char *

&gtW c++ nie ma dosc sztucznego podzilu na procedury i funkcje,a te ostatnie w inny sposob zwracaja wartosc.
&gt

DUPA 2 : SA Tylko funkcje , tylko ze niektore nie zwracaja zadnej wartosci (zwracaja void)

&gtJak już ktoś z programujących w C++ napisał, to tylko kwestia nazewnictwa.

HA : bez komentarza

&gtW c++ operacje wskaznikowe nie sa ograniczone tylko do zmiennych dynamiczcnych.
&gt

a niby jak jak wszystko moze byc zmienna dynamiczna (i wszystko jest)

&gtOstatnio pq udowodnił mi, że także obiekty są przekazywane przez wskaźniki.
&gt

Obiekty (czyt. KLASY) sa przekazywane tylko poprzez wskazniki lub poprzez referencje , przekazywnie poprzez wskazniki jest rzadziej stosowane :-)

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