Article View: pl.comp.objects
Article #4733Re: Prawda o C++
From: Sektor van Skijlen
Date: Tue, 19 Jan 1999 13:23
Date: Tue, 19 Jan 1999 13:23
100 lines
3949 bytes
3949 bytes
In pl.comp.objects A. Hajderek <andrew@logicscope.net> wrote:
:>1. Tablica wielowymiarowa jest typem wyzszego rzedu.
: Dlaczego
: int tablica[2][3];
: jest typu wyzszego rzedu
: a
: int tablica[2]
: nie?
Tyle, kolego, ze o ile mozesz napisac:
char t[] = "Ale jaja";
to juz nie mozesz napisac:
char t[][] = { "Ale jaja", "jeszcze wieksze" };
Podobnie, jak mozesz zrobic tak:
int dt( int a[], int da );
to nie zrobisz czegos takiego:
int dupa( int t[][], int d );
bo kompilator Ci powie:
pointer or reference to array of unknown bound in parm type
^^^^^^^ ^^^^^
A powod tego jest taki, ze typ int [] jest typem niekompletnym. O ile zas typ
niekompletny moze wystepowac na liscie parametrow, o tyle nie mozna na jego
bazie budowac typu nastepnego rzedu (nie wszystkich typow to dotyczy, ale
tablic tak). Podobnie np. zrob sobie tak:
class Klocek;
...
Klocek* k1;
Klocek kt[2];
O ile deklaracje wskaznika kompilator przyjmie, o tyle deklaracji tablicy juz
nie. Ujme to moze wszystko w ten sposob:
Nie mozna tworzyc tablicy na bazie typow niekompletnych (ale mozna wskazniki i
referencje).
Tablica z niezadeklarowanym wymiarem jest przykladem typu niekompletnego.
Oczywiscie tablica dwuwymiarowa jest tylko jednym z przykladow typow wyzszego
rzedu. Moj blad, ze powiedzialem ogolnie o typach wyzszego rzedu.
: Po co wprowadzac mylace definicje? Tablice jedno- i wielowymiarowe w C to
: rzeczywiscie prymitywne typy - zreszta takie bylo zalozenie przy tworzeniu
: jezyka.
Tak samo prymitywne ? Radzilbym Ci sie dobrze zastanowic, zanim cos takiego
palniesz.
: Jesli stworzymy w C++ klase, w ktorej zdefiniujemy operator [], to wtedy
: mozemy mowic o typie wyzszego rzedu.
Bedzie sie on najczesciej opieral na typie wskaznikowym, a ten nigdy nie jest
niekompletny.
Raczej powinienem wiecej wczesniej powiedziec o typach niekompletnych.
Typ niekompletny to moze byc:
a) tablica z niezadeklarowanym wymiarem
b) struktura, ktora ma tylko zapowiedz
c) w C++ mozna rowniez za takowe uwazac klasy abstrakcyjne
Restrykcje sa mianowicie takie, ze:
a) nie mozna tworzyc obiektow typow niekompletnych
b) nie mozna tworzyc tablic na bazie typow niekompletnych
Mozna jednak:
a) tworzyc wskazniki i referencje do typow niekompletnych
b) wstawiac je jako typy parametrow do deklaracji funkcji
Jesli chodzi o to drugie, to typ najczesciej jest deklarowany w momencie
takiej wlasnie deklaracji:
int main( int argc, char* argv[] );
int Dobij( class Druga& rem );
Co do mozliwosci deklarowania niekompletnego typu tablicowego, to jeszcze nie
probowalem :*))
Co prawda nie napisalem wyraznie, w czym sie mylilem, ale mam nadzieje, ze te
wyjasnienia rozwialy rozne watpliwosci.
--
-=* 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:
<782115$9l8$4@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> <77vn97$j3l$1@polonez.man.lodz.pl> <916685665.28151.0.nnrp-06.c2d9616c@news.demon.co.uk>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: 19 Jan 1999 13:23:49 GMT
Lines: 100
Message-ID: <782115$9l8$4@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> <77vn97$j3l$1@polonez.man.lodz.pl> <916685665.28151.0.nnrp-06.c2d9616c@news.demon.co.uk>
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