Tam Sürümünü Görmek İçin : c++ vector
hocam merhaba, ben c++ ta sınıftan nesnesne oluşturacağım fakat bu nesneyi vector ile oluşturup üye fonksiyonlara erişmem gerekiyor. Bu sınıf özelliklerine (private - değişkenler) nasıl veri aktarabilirim. örneğin vector <sinif> mysinif; gibi bir vector oluşturduğumda sınıfın isim değişkenine nasıl aktarma işlemi yapabilirim. fonksiyonla değişkenlere erişebilirim fakat bu değişkenlere eriştiğim zamanda vector deki içerik değişirmi yoksa ek bir function kullanıp yenelemem mi gerekir. örneğin push_back ile son kısma yer açılır veri aktarılır. bunu class vectorde nasıl uygulayabilirim.
:)
sorunu cok fazla anlamadim aslinda umarim daha cok kafani karsitirmam,anladigim kadariyla soyle soyliyim
private degiskenlere veri aktarmak istiyorsan ilgili degiskenlere erisebilen public fonksiyonlar kullanabilirsin.Eger vector icine kopyaladigin nesnenin fonksiyonunu cagirirsan (mysinif.front()->Ad gibi) vectordeki bilgiler dogal olarak degisir. Ama disarida tanimlayipda push_back fonksiyonuna kopyalanacak sekilde parametre aktardiysan ve vector disindaki nesneye ait fonksiyonu cagirirsan vector icerigi degismez
( BirTur nesne_;
mysinif.pushback(nesne_),
nesne_.Ad = "...."; gibi kullanirsan )
eger bu sekilde kullanipda vectordeki icerik degissin istiyorsan isaretci kullanman gerekir.
acehreli
26/05/2007, 02:29
vector'u bir dizi gibi kullanirsan, icinde tuttugu nesnelere 'referans' elde edersin. O referans yoluyla degistirdiginde de vector'un icindeki nesne degistirilebilir.
Simdilik soyle bir kod kullanabilirsin:
vector<sinif> siniflarim;
siniflarim.push_back(sinif(/*...*/);
/* vs. baska nesneler de eklenebilir... */
for (size_t i = 0; i != siniflarim.size(); ++i) {
sinif & nesne = siniflarim[i];
nesne.birIslem();
}
Bunu yapmanin baska yollari da var ama simdilik isine yarayacaktir.
Ali
hocam olay şöle, öncelikle özür dilerim olayı tam anlatamadım. sonradan okuyunca bende bişi anlamadım çünkü :) herneyse;
class musteri{
private:
string ad;
string soyad;
string adres;
int tel;
public:
void musteri_ekle(x,y,z,m){
ad=x;
soyad=y;
adres=z;
tel=m;
}
/*gibi olsun şimdi benim yapmak istediğim class dışarısından başka bir cpp dosyasından nesne tanımlarken bu nesneyi vector ile tanımlamak şöleki;*/
vector <musteri> musterim;
//msuterim[i].???????. //buna eklenen bir fonksiyon ile mesala
/*musterim[i].push_back.musteri_ekle(x,y,z,m);
gibi bir fonksiyonla class a fonksiyon üzerinden veri aktarmak, yani vector nesnesi yaparak bunu kullanabilme. çünkü yapmam gereken işte dosyaya kayıt yaptıracağım*/
soru: eğer class ı bu şekilde kullanırsam dosyaya her satıra bir nesneyi yazdırmam da bir uyumsuzluk olurmu?
ilginiz için teşekkür ederim!
acehreli
26/05/2007, 03:18
Ortada buyuk karisikliklar var. :)
1) musteri sinifinda 'musteri_ekle' diye bir islev olamaz. musteri'ye musteri eklenemez degil mi...
2) x, y, z, ve m'nin turlerini de bildirmen gerekir degil mi.
3) Senin musteri_ekle dedigin sey aslinda bir kurucu islev (constructor). Onun adini musteri olarak degistir ve aynen soyle yaz:
class musteri
{
/* ... */
musteri(const string & a,
const string & sa,
const string & adr,
int t)
:
ad(a),
soyad(sa),
adres(adr),
tel(t)
{}
};
Bunun sayesinde artik kullanilmaya hazir musteri nesneleri olusturabilirsin:
musteri tuzluMusteri("Veli", "Ozprogramci", "Ankara", 1234);
Artik 'tuzluMusteri' diye bir nesnen var.
4) "Nesneyi vector ile tanimlamak" bana hicbir sey ifade etmiyor. C++'in vector'unun C'nin dizisinin esdegeri oldugunu biliyor musun. (Diziden cok daha ustundur tabii.)
5) vector bir topluluktur. Yani adini soyle koymak mantikli:
vector<musteri> musterilerim;
musterilerim.push_back(tuzluMusteri);
musterilerim.push_back(belaliMusteri);
musterilerim.push_back(musteri("ali", "kirkdokuzelli", "istanbul", 987));
Oradaki en son satirda adsiz bir musteri olusturup topluluga ekledik. Bunu yukaridak gosterdigim kurucu islev sayesinde yapabildik.
6) Dosyaya yazdirma isleminin buraya kadar konustuklarimizla hicbir baglantisi yok. O ayri bir konu...
Ali
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class musteri{
private:
string ad;
string soyad;
string adres;
int tel;
public:
musteri(const string & a,const string & sa,const string & adr,int t){
ad=a;
soyad=sa;
adres=adr;
tel=t;}
};
int main(){
vector<musteri> musterilerim;
musteri tuzluMusteri("Veli", "Ozprogramci", "Ankara", 1234);
musteri belaliMusteri("mehmet", "ogrenci", "adana", 4567);
musterilerim.push_back(tuzluMusteri);
musterilerim.push_back(belaliMusteri);
musterilerim.push_back(musteri("ali", "kirkdokuzelli", "istanbul", 987));
//cout<<musterilerim[tuzluMusteri]<<endl;//hata veriyor
}//int main bitti
hocam sölediğiniz şekilde olaya constructor ile yaklaşmaya çalıştım sanırım bişiler oldu ama; musterilerim vectorunun içeriğine nasıl ulaşacağımı çözemedim. yardımlarınız için tekrar teşekkür ederim...
acehreli
28/05/2007, 01:23
Yukaridaki #3 numarali mektubu gozden kacirmissin herhalde. :)
Ali
acehreli
28/05/2007, 01:42
Simdi aklima geldi... Ben vector'u anlatan iki tane yazi yazmistim. Birincisi surada:
http://www.ceviz.net/stdvector-temel-islemleri_a202.html
Onu ve baska yazilari su sayfada bulabilirsiniz:
http://www.ceviz.net/c-c-c_c13.html
Ali
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class musteri{
private:
string ad;
string soyad;
string adres;
int tel;
public:
musteri(const string & a,const string & sa,const string & adr,int t){
ad=a;
soyad=sa;
adres=adr;
tel=t;
}
void musteri_oynat(){
cout<<ad<<" "<<soyad<<" "<<adres<<" "<<tel<<endl;
}
};
int main(){
vector<musteri> musterilerim;
musteri mus("Veli", "Ozprogramci", "Ankara", 1234);
mus.musteri_oynat();
cin.get();
musteri tuzluMusteri("Veli", "Ozprogramci", "Ankara", 1234);
musteri belaliMusteri("mehmet", "ogrenci", "adana", 4567);
musterilerim.push_back(tuzluMusteri);
musterilerim.push_back(belaliMusteri);
musterilerim.push_back(musteri("ali", "kirkdokuzelli", "istanbul", 9878));
musteri & mus=musterilerim[1];
mus.musteri_oynat();
cin.get();
}
hocam çok saolun ya, dikkatimden kaçmış biraz uğraşınca oldu. yukarıya yaptığım örneği ekledim belki bir arkadaşın işine yarar diye... iyi günler dilerim! kolay gelsin...
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.