🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #267693

Re: Ciemna strona C++

#267693
From: Seweryn Habdank-Wojewódzki
Date: Sat, 10 Nov 2007 14:21
147 lines
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-mail
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>

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