Article View: pl.comp.objects
Article #4712Re: Prawda o C++
From: Sektor van Skijlen
Date: Mon, 18 Jan 1999 16:25
Date: Mon, 18 Jan 1999 16:25
138 lines
5560 bytes
5560 bytes
In pl.comp.lang.c Adam Karpierz <karpierz@itl.pl> wrote:
: Sektor van Skijlen wrote:
:>In pl.comp.lang.c Adam Michalski <aimsoft@box43.gnet.pl> wrote:
:>: Oj kolego, nie wyglaszaj takich kategorycznych stwierdzen...
:>: przypomnij sobie jakie miales problemy z dwuwymiarowymi tablicami i
:>: wskaznikami...
:>: PNMSP
:>
:>To nie ma nic do rzeczy. Tablice wielowymiarowe sa problematyczne przez wzglad
^^^^^^^^^^^^^^
:>na to, ze sa to typy wyzszego rzedu. Poza tym tablice nie maja nic wspolnego z
:>referencjami. Referencje to temat az nadto prosty.
: Boze... Tablice w C to typy wyzszego rzedu ?. O zgrozo !
: Prymitywy najnizszego rzedu z mozliwych.
: Nie ma chyba drugiego jezyka w ktorym by byly tak prymitywnie
: (bo przez wskazniki) zrealizowane.
Moj drogi Adamie. Wielu rozmowcow tym swoim lenistwem podczas czytania
doprowadzilbys do bialej goraczki; mnie wystarczylo, ze doprowadziles siebie
do samokompromitacji. Wyraznie napisalem: TABLICE WIELOWYMIAROWE, czyli
conajmniej dwuwymiarowe.
Jesli ktos zas nie pamieta, przypomne, ze swego rodzaju dyskusja odbyla sie tu
swego czasu nt. wskaznikow i tablic wielowymiarowych, w ktorej wyszly
(nieoficjalnie, bo w koncu nie napisalem podsumowania) nastepujace rzeczy:
1. Tablica wielowymiarowa jest typem wyzszego rzedu.
2. Nie mozna tworzyc typow nastepnego rzedu, jezeli typ poprzedniego rzedu
jest typem niekompletnym.
3. Tablica i wskaznik maja rownowazne typy, lecz sa to zmienne o innym
charakterze.
Tablica jednowymiarowa jest jak najbardziej typem pierwszego rzedu (czy tam
zerowego, zeby byc politycznie poprawnym).
: (No moze jeszcze stary FORTRAN 4 im dorownywal).
: Zero kontroli, zero mozliwosci dzialan zagregowanych
: (w tym na podtablicach).
: Brak dynamicznosci wymiarow.
: Jedyna wlasciewie uzyteczna technika to realizacja przez
: tablice pointerow ale.. no wlasnie przy okazji trzeba
: pokonac koszmarny sposob przydzialu pamieci w tym
: przypadku wymagajacy "poglebionej" wiedzy o pointerach.
Tak, Adamie... ponarzekaj jeszcze na to, ze zmienne trzeba w C przekazywac
przez wskaznik (jesli chce sie przekazac zmienne), ze funkcja qsort potrzebuje
jawnie otrzymac rozmiar tablicy i ich elementow, ze trzeba robic tyle
przeksztalcen... na jezyk C mozna jeszcze dlugo narzekac.
: Sa i zalety (szybki dostep) ale czy rownowazy to wady ?.
W C++ - tak. Bo w C++ mozna te wady wyeliminowac.
: A jesli chodzi o referencje to i owszem.
: Byloby to i lekarrstwo na szalenstwo wskaznikowe w C++
: gdyby nie... No wlasnie
: Gdyby nie to ze nie mozna zmienic obiektu "referowanego".
: Moze mi ktos wytlumaczy dlaczego ?.
Ech, co ja bede mowic... a moze by tak podejsc do tego z lekkim zrozumieniem,
co ? W ogole nie czujecie jezyka C++. Dlaczego niby kojarzycie referencje ze
wskaznikami ? To bez sensu. Referencje to zupelnie co innego. Referencje moga
CZASEM BYC zaimplementowane przez wskazniki, ALE NIE MUSZA! Jezeli np. mamy w
programie cos takiego:
struct CosTam
{
int i;
int k;
};
...
{
...
CosTam* nic = new CosTam[20];
...
int& pk = nic[4].k;
...
pk = 2;
}
Tutaj moze byc zaimplementowana jako wskaznik, ale np. tutaj juz nie:
{
CosTam* nic = new CosTam;
CosTam& rnic = *nic;
rnic = { 2, 65 };
}
Podobnie np:
struct Cos
{
int* tab;
size_t size;
int& rt;
public:
Cos( size_t s ): rt( tab[2] )
{
size = s;
tab = new int [size];
}
};
Ile bedzie zawierac pol ? Dwa, czy trzy ?
Aha, zeby nie bylo potem nieporozumien - napisalem to, co mi sie wydaje
logiczne, standard nie precyzuje przeciez, jak co kompilatory maja
implementowac. Napisalem tylko to, co mi sie wydaje logiczne.
: Skutek ?. Dalej wskazniki kroluja.
I bede krolowac. I to sie raczej nie zmieni.
Szkoda co prawda troche, bo juz musialem w programie uzyc skladni:
(*prop)->blocks;
Komitet normalizacyjny jezyka C++ nie zdecydowal sie na zrobienie
inteligentnych odniesien, gdyz nie mial dobrej koncepcji (nie tylko
przeciazanie opratora . , ale jeszcze np. podanie samej nazwy pola).
Wskazniki beda krolowac przez wzglad na tablice niestety. Do zmiennych
referencji raczej trzeba bedzie wymyslic co innego.
A' propos - nie probowalem jeszcze kopiowac obiektow zawierajacych
odniesienia. Wydaje mi sie (jeszcze nie sprawdzalem, bo mi sie nie chce), ze
trzeba bedzie zrobic normalnie konstruktor (w tym i kopiujacy), ktory przypisze
odniesieniom odpowiednie obiekty docelowe.
--
-=* P O Z D R A W I A M ! *=-
[-=* Ij waiet salden mijn spijr, ta faenen aire ats trauven diaenna *=-]
____....----````Sektor van Skijlen: sektor at beer.com''''----....____
<sPAm @ pROtEctIOn>
Technical Details
Message-ID:
<77vn97$j3l$1@polonez.man.lodz.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!news.man.lodz.pl!not-for-mailReferences:
<77o3bl$j0q$1@polonez.man.lodz.pl> <369FDDCE.7B94748A@interdata.com.pl> <77q41i$j7f$1@polonez.man.lodz.pl> <wU3o2.25549$U1.4744058@news.tpnet.pl> <77qi2q$42a$1@polonez.man.lodz.pl> <77qk38$ken$1@zeus.polsl.gliwice.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!news.man.lodz.pl!not-for-mail
From: Sektor van Skijlen <sektor@spam.org>
Newsgroups: pl.comp.lang.c,pl.comp.objects
Subject: Re: Prawda o C++
Date: 18 Jan 1999 16:25:11 GMT
Lines: 138
Message-ID: <77vn97$j3l$1@polonez.man.lodz.pl>
References: <77o3bl$j0q$1@polonez.man.lodz.pl> <369FDDCE.7B94748A@interdata.com.pl> <77q41i$j7f$1@polonez.man.lodz.pl> <wU3o2.25549$U1.4744058@news.tpnet.pl> <77qi2q$42a$1@polonez.man.lodz.pl> <77qk38$ken$1@zeus.polsl.gliwice.pl>
NNTP-Posting-Host: zly.kis.p.lodz.pl
User-Agent: tin/pre-1.4-981225 ("Volcane") (UNIX) (SunOS/5.5.1 (i86pc))
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit