🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #4733

Re: Prawda o C++

#4733
From: Sektor van Skijlen
Date: Tue, 19 Jan 1999 13:23
100 lines
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-mail
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>

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