Pozdrav obojici, pretpostavljam da ste prijatelji i da ste iz istog mesta. Što se tiče razloga zašto sam stavio baš ta dva broja, ne postoji. To su dva nasumice odabrana broja čisto da prosledim neku vrednost konstruktoru. Jer kako kreirati klasu ako nisam dodelio vrednosti neke koje su obavezne. Uloga konstruktora je da dodeli neke vrednosti poljima unutar klase. Skoro nikada se to ne radi tako jer će svako napraviti svoju metodu koja će detaljno uzimati vrednosti od korisnika za sama polja. Ja ne želim da u programu upisujem vrednosti, jer koja je svrha takvog programa? Želim da korisnik unosi vrednosti kroz metodu koju ja osmislim. Bilo kako bilo, postoje da kaže dve vrste konstruktora. Možemo ga pisati ovako:
Kod:
Public ImeKlase() {
nekaPromenljiva = 0;
nekaPromenljiva1 = 5;
}
Ovo je najobičniji konstruktor koji odmah po kreiranju instance klase dodeljuje neke kako bi mi rekli DEFAULT vrednosti poljima u klasi. Tako da svaka promenljiva bude deklarisana na vreme. Postoji i OVERLOAD konstruktor ili ti preopterećen konstruktor koji izgleda evo ovako:
Kod:
Public Ime Klase(int num1, int num2) {
nekoPolje = num1;
nekoPolje2 = num2;
}
Imajte u vidu da ukoliko vi napravite overload konstruktor, ovaj običan ne postoji, jer ste vi napravili već overload. A ako ne napravite overload, pa ni običan, onda će sam kompajler da kreira neki default konstrutor, umesto vas, i dodeliće poljima vrednosti svojstvene njihovim tipovima. Ako je boolean, onda je false, ako je int, onda je 0 itd.
Recimo, ako postoji želja da se izračuna površina kvadrata, onda napravimo ovakav prost program:
Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Moj_prvi_projekat
{
class Kvadrat
{
private int stranica;
public Kvadrat(int vrednost)
{
stranica = vrednost;
}
public int IzracunajPovrsinu() {
return stranica * stranica;
}
static void Main(string[] args)
{
Kvadrat InstancaKlaseKvadrat = new Kvadrat(4);
int P = InstancaKlaseKvadrat.IzracunajPovrsinu();
Console.WriteLine(P);
}
}
}
Međutim, ovo je nešto što ne zahteva ništa od korisnika, ovo je krajnje nepraktičan program. Da bi smo ga učinili praktičnijim, neophodno je da imamo sopstvenu metodu za unos podataka , pa modifikujemo klasu ovako:
Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Moj_prvi_projekat
{
class Kvadrat
{
private int stranica;
public Kvadrat()
{
stranica = 0;
}
public void UzmiVrednosti() {
Console.WriteLine("Unesite koliko iznosi stranica kvadrata");
stranica = Convert.ToInt32(Console.ReadLine()); //Konvertuje string u integer i skladišti ga u promenljivu stranica
}
public int IzracunajPovrsinu() {
return stranica * stranica;
}
static void Main(string[] args)
{
Kvadrat InstancaKlaseKvadrat = new Kvadrat();
InstancaKlaseKvadrat.UzmiVrednosti();
int P = InstancaKlaseKvadrat.IzracunajPovrsinu();
Console.WriteLine(P);
}
}
}
Šta se ovde promenilo? Pa, obrisao sam overload konstruktor i stavio onaj default, čisto da po kreiranju klase dodeli vrednost 0 polju u klasi. A zatim sam odmah pozvao metodu UzmiVrednosti koja sama po sebi ispisuje tekst gde traži od korisnika da unese neki broj, a potom taj broj smešta u polje stranica. Imajte u vidu da je metoda ReadLine takva da vraća STRING, a ne integer, bez obzira ako korisnika unese broj. Pa sam zato konvertovao string u integer da ne bi bilo problema. Naravno, ova metoda koju sam ja kreirao daleko je od savršenstva jer ne postoji kontrola unosa. Šta ako je uneo -5? Nerealno je da površina bude negativan broj. Ili, šta ako je uneo tekst umesto broja? Program će krešovati i prestaće sa radom bez adekvatne poruke korisniku šta se desilo.
Ako postoje još neka pitanja, izvolite.