[ k4rl0 @ 04.10.2006. 20:03 ] @
Pls ako neko zna kak da ovo rjesim:
Fajl 1:
Code:

using System;
using System.Collections.Generic;
using System.Text;

public class Menu {
static void Main(string[] args) 
{
    int i;
    bool yon=true;
    Console.WriteLine("Unesi ime psa:");
    string name = Console.ReadLine();
    Pas mojpas = new Pas(name);
    Console.WriteLine("Unesi ime macke:");
    name = Console.ReadLine();
    Macka mojamacka = new Macka(name);
    Console.WriteLine("1-Ispisi ime psa");
    Console.WriteLine("2-Promjeni ime psa");
    Console.WriteLine("3-Ispisi ime macke");
    Console.WriteLine("4-Promjeni ime macke");
    while (yon)
    { i = Convert.ToInt32(Console.ReadLine());
    if (i == 1)
        mojpas.pricaj();

    if (i == 2)
    {
        Console.WriteLine("U koje ime zelite promjeniti njegovo ime?");
        string novoime = Console.ReadLine();
        mojpas.promjeni(novoime);
    }

    if (i == 3)
        mojamacka.pricaj();

    if (i == 4)
    {
        Console.WriteLine("U koje ime zelite promjeniti njegovo ime?");
        string novoime = Console.ReadLine();
        mojamacka.promjeni(novoime);
    }

    if (i == 0)
        yon=false;
    }
    Console.ReadLine();

}

Fajl 2:
Code:

using System;
public class Pas
{
public string ime;
public Pas(string imecucka)
{
ime = imecucka;
Console.WriteLine("Kupio si psa,a dje mu nadje ime {0}.", imecucka);
}
public void pricaj()
{
Console.WriteLine("Zovem se {0}.", ime);
}

public void promjeni(string unos)
{
ime = unos;
}
}

Fajl 3:
Code:

using System;

public class Macka : Pas
{
public Macka(string ime) : base(ime)
{
Console.WriteLine("Ja sam slatka maca,a zovem se {0}",ime);
}

}

.....................
Znaci imam jednu klasu Pas,te klasu Macka koja nasljeduje metode
od klase Pas.Kad instanciram klasu pas,poziva se konstruktor od klase
Pas,a kad instanciram klasu Macka,poziva se konstruktor od klase Pas,
pa onda konstruktor od klase Macka.
Ono sto ja zelim je da kad instanciram klasu Macka da se pozove samo
njen konstruktor,ne konstruktor od klase Pas i od klase Macka.
Ako neko zna,bio bih zahvalan,pozdrav..

[Ovu poruku je menjao X Files dana 04.10.2006. u 21:36 GMT+1]
[ X Files @ 04.10.2006. 20:36 ] @
Ovo treba u .NET forum.
[ NrmMyth @ 04.10.2006. 20:41 ] @
Pozivanje konstuktora bazne klase u konstuktoru izvedene je ispravan nacin, sto zelis postici izbjegavanjem toga?
[ Milan Aksic @ 04.10.2006. 21:07 ] @
Citat:
Ovo treba u .NET forum.

Ova tema je i bila prebacena iz foruma C++ u .Net forum, neko je vratio izgleda.

Nego, da pokusamo ponovo.
[ Zevs85 @ 05.10.2006. 00:42 ] @
Konstruktor sluzi za samo instanciranje objekta. Znaci inicijalizacija atributa klase. U konstruktoru se ne pise writeline ili tako nesto. To mozes koristiti eventualno za neku proveru.
[ maksvel @ 05.10.2006. 07:19 ] @
Pa, mora da se pozove konstruktor bazne klase, jer se Mačka sastoji iz baznog "pas dela" i nasleđenog "mačka dela" (jeste da zvuči morbidno, ali takve si klase napravio)
(Kad je već ambivalentna tema : Kod C++-a pri višestrukom nasleđivanju može doći do situacije da se dvaput instancira isti deo objekta (jer je izvedena klasa po "nekom kolenu" nasledila jednu istu klasu). Ovo se eliminiše virtuelnim nasleđivanjem.)
[ Dejan Vesic @ 05.10.2006. 09:52 ] @
Kreiraj "prazni" konstruktor Pas klase:
Code:

        public Pas()
        {
        }


Dodaj posebni metod za postavljanje imena u Pas klasi:
Code:

        public void SetIme(string NovoIme) {
            ime = NovoIme;
        }


Promeni postojeći konstruktor Pas klase:
Code:

        public Pas(string imecucka)
        {
            SetIme(imecucka);
            Console.WriteLine("Kupio si psa,a dje mu nadje ime {0}.", imecucka);
        }


Promeni postojeći konstruktor Macka klase:
Code:

        public Macka(string ime)
        {
            SetIme(ime);
            Console.WriteLine("Ja sam slatka maca,a zovem se {0}", ime);
        }


(izostavi poziv :base konstruktora, time će se pozvati Pas konstruktor bez parametara)
[ Java Beograd @ 08.10.2006. 17:27 ] @
Dejan je, zapravo, napisao sta uraditi da sve izgleda kao da se nije pozvao konstruktor klase Pas, ali celo pitanje u stvari nema smisla. Ako klasa Macka nasledjuje klasu Pas, onda treba i mora da se pozove konstruktor klase Pas.
[ Dejan Vesic @ 08.10.2006. 21:56 ] @
Upravo obrnuto.

Preuredio sam klase tako da "class specific" ponašanje ide u konstruktore sa parametrima, a ponašanje zajedničko za sve klase ide u konstruktore bez parametara (default konstruktore).

Konstruktor klase Pas će biti pozvan (i treba) ali samo refaktorisanje klasa treba tako odraditi da je traženo ponašanje moguće.
[ negyxo @ 09.10.2006. 09:42 ] @
Mislim da je ovde problem u design pattern-u. Ovde je malo promasen. Nema smisla izvoditi klasu macka iz klase pas. Sta oni imaju zajednicko? Bilo bi smisla naledjivati klasu pas u, recimo, Doberman ili NemackiOvcar itd. Znaci neka vrsta specijalizacije "osnovnog" psa. Za ovaj problem sa mackom bi trebalo uvesti neku base klasu koja ce biti zajednicka i psu i macki. Recimo, KucniLjubimac. Ovo su same osnove objektnog programiranja i nasledjivanja i jedan od najcescih primera, po meni mozda i najbolje objasnjenih, je shape kalsa i njene izvedene klase.

http://www.codeproject.com/useritems/OpenClosePrinciple.asp
[ k4rl0 @ 09.10.2006. 10:49 ] @
Ma ovo sam ja tek tolko pisao da malo uvijezbam nasljedivanje.
Znam da je malo besmisleno,al ipak..
Napravio sam opciju sa dummy konstruktorom i to radi,radi u
svrhe koje sam ja radio,znam da je primjer glup i da macka nebi
trebala nasljediti od psa,nego npr. neke klase "Kucni ljubimac",od
koje bi nasljedio i pas,al sta ces,napravio sam glup primjer,al vazno
je da sam shvatio princip rada.
Hvala na odgovorima