Article View: pl.comp.lang.c
Article #267693Re: Ciemna strona C++
From: Seweryn Habdank-Wojewódzki
Date: Sat, 10 Nov 2007 14:21
Date: Sat, 10 Nov 2007 14:21
147 lines
3763 bytes
3763 bytes
Witam
Piotr Wyderski wrote:
> Seweryn Habdank-Wojewódzki wrote:
>
>>> A co jest ciężkiego w vectorze?
>>
>> Waży 12 bajtów?
>
> Alokuje. I zwalnia.
OK. Masz 100% racji, ale w tym przypadku zawsze jest jakaś alokacja.
Poniżej ten sam kod napisany w J (działa).
Pokaż mi, że potrafisz go napisać bez alokacji. Zwróć uwagę na to jak
wygląda linijka oznaczona /* ### */. Tam są "new B()", to jest alokacja.
Zarówno w J jak i w ++ polimorfizm uzyskuje się w sposób dynamiczny.
Zatem w tym konkretnym przypadku kiedy masz tablicę i chcesz, aby ona
zawiadywała obiektami polimorficznymi, musisz coś alokować.
Poniżej kodu J jest identyczny kod w ++ też działa.
Pozdrawiam.
/* ------------------- JAVA ------------------ */
public class A {
public A() {
i_ = 0;
}
public void m() {
System.out.println(i_);
}
public int i_;
}
public class B extends A {
public B() {
super ();
j_ = 0;
}
public void m() {
System.out.println(j_);
System.out.println(super.i_);
}
public int j_;
}
public class Test {
public Test() {
}
public void test (A a[])
{
a[0].m();
a[1].m();
a[2].m();
}
}
public class Main {
public Main() {
}
public static void main(String[] args) {
Test tester = new Test();
/* ### */
B barr[] = {new B(), new B(), new B()};
tester.test (barr);
}
}
/* --------------- C++ -------------------- */
#include <cstdio>
class A
{
public:
A() : i_ (0) {}
A(int i) : i_ (i) {}
virtual void m()
{
printf("%s %d\n", "A::m", i_);
}
virtual ~A(){}
int i_;
};
class B : public A
{
public:
B() : A (0), j_ (0) {}
B(int i, int j) : A (i), j_ (j) {}
virtual void m()
{
printf("%s %d %d\n", "B::m", A::i_, j_);
}
virtual ~B(){}
int j_;
};
void test (A & a)
{
a.m();
}
//void test (A arr[3])
void test (A* arr[3])
{
arr[0]->m();
arr[1]->m();
arr[2]->m();
}
int main()
{
int const TAB_SIZE = 3;
A* b_arr[TAB_SIZE];
for (int i = 0; i < 3; ++i)
b_arr[i] = new B();
test (b_arr);
for (int i = 0; i < TAB_SIZE; ++i)
delete b_arr[i];
}
--
|\/\/| Seweryn Habdank-Wojewódzki
\/\/
Technical Details
Message-ID:
<fh4e03$gnp$1@news.vectranet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.vectranet.pl!not-for-mailReferences:
<fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh206f$2d6$1@news.supermedia.pl> <fh2ma2$rd0$1@news.vectranet.pl> <fh2po8$d0c$1@news.dialog.net.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.vectranet.pl!not-for-mail From: Seweryn Habdank-Wojewódzki <shw_mail@wp.pl> Newsgroups: pl.comp.lang.c Subject: Re: Ciemna strona C++ Date: Sat, 10 Nov 2007 15:21:33 +0100 Organization: VectraNET - http://www.vectranet.pl Lines: 148 Message-ID: <fh4e03$gnp$1@news.vectranet.pl> References: <fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh206f$2d6$1@news.supermedia.pl> <fh2ma2$rd0$1@news.vectranet.pl> <fh2po8$d0c$1@news.dialog.net.pl> Reply-To: shw_mail@wp.pl NNTP-Posting-Host: 078088193244.osw.vectranet.pl Mime-Version: 1.0 X-Trace: news.vectranet.pl 1194703684 17145 78.88.193.244 (10 Nov 2007 14:08:04 GMT) X-Complaints-To: usenet@news.vectranet.pl NNTP-Posting-Date: Sat, 10 Nov 2007 14:08:04 +0000 (UTC) User-Agent: KNode/0.10.5 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit