Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

c++ - main'den private'a ulaşma


Chewy

Öne çıkan mesajlar

beyler bu dönem c++ alıyorum.
Şimdi istediğim publicte fonksiyon yazmadan main'de averaj hesaplama.Yani 2 öğrenci girikcek getle alıcam bilgilerini showla göstericem.Ama main'de yapacağım işlemlerle bu ikisinin GPA'sının averajını alıcam.Functionla olur yaparım ama hoca istemiyor.



Kod


#include<iostream>
using namespace std;

// a class which includes a student's information
class Student{
private:
int idNo;
double gpa;
int deptcode;

public:
void get_info()//Getting from the user idno, gpa and departmen code
{
cout<<"nEnter your ID No:";cin>>idNo;
cout<<"nEnter your GPA:";cin>>gpa;
cout<<"nEnter your Departmen Code:";cin>>deptcode;
}

void show_info()//Showing the information which user inputted
{

cout<<"nId No is"<<idNo<<"nGPA is "<<gpa<<"and Departmen code is"<<deptcode;

}


};

int main()
{

Student fstu,sstu,avg;

fstu.get_info();//Getting first student's information
sstu.get_info();//Getting second student's information

fstu.show_info();//Showing first student's information
sstu.show_info();//Showing second student's information





system("PAUSE");
return 0;

}

Link to comment
Sosyal ağlarda paylaş

Kojiroh said:

Student sınıfının içinde public bi metod yaratacaksın aşağıdaki gibi:


double get_gpa()
{
return this->gpa;
}


Ardından mainin içinde de aşağıdaki gibi bi satırın olcak:


cout << "Average GPA: " << ((fstu.get_gpa()+sstu.get_gpa())/2) << endl;
Inside the main add a code segment, which displays the average gpa of these students. Can you
access the gpa data member of a Student object from main? Discuss possible solutions and
implement the proper one. demişte.Şimdi senin bu dediğinde bi bakıma function değil mi :S
Link to comment
Sosyal ağlarda paylaş

private olan bi nesneye dışardan erişemezsin. Erişmen gerekiyosa private yapmazsın, public yaparsın. Ama bu durumda da güvenliğini sağlayamazsın, üzerinde değişiklik yapılabilir dışardan.

Dolayısı ile eğer nesnenin bi propertysi dışardan erişilebilsin ama müdahale edilemesin istiyosan, az önce yazdığım gibi bi metod tanımlamak zorundasın. Sınıfın kendinden dışarı bi pencere açmış oluyosun bi nevi, encapsulation denilen olayın ta kendisi.

Yazdığın şeyde, main'den student'ın private alanına erişebilir misin dene, erişemezsen tartışa tartışa en doğru çözümü bul demiş. En doğru çözüm bu işte, anahtar kelime de encapsulation.
Link to comment
Sosyal ağlarda paylaş

get_gpa gibi bir metodu kullanmanızı isteyecek, oradan da encapsulation konusuna başlayacak sanırım, başka yolu yok

hocanız fantastik bir adamsa private değerin adresini alıp değiştirmenizi bekliyor diyeceğim ama aklıselim bir compiler hede->hödö dediğin an hödö private değer, napıyorsun arkadaşım der, fonksiyon kullanmadan yaptırt diyorsan bu daha da mümkün değil
Link to comment
Sosyal ağlarda paylaş

tamam beyler anladım saolun.
Şimdi yeni program yazdım.

burda s3'e toplanmış değerleri atmak istoyurm.Ama yukarıdaki functionı görmüyor :S.Neden ? 2 tane parametre gidiyor, maindede 2 tane parametre giriyorum function un içine


<div class="spinfo">pgm</div>
#include<iostream>
#include<stdlib.h>
using namespace std;

class Int{

int number;

public:
void initialize()
{
number=0;
}

int new_number(int n1)
{
number=n1;
}

void show()
{
cout<<"Sayi"<<number;
}

int topla(int d1,int d2)
{
return(d1+d2);
}

};

int main()
{
Int s1,s2,s3;

s1.new_number(5);
s2.new_number(6);

s3.topla(s1,s2);


system("PAUSE");
return 0;
}



Link to comment
Sosyal ağlarda paylaş

cunku int yazdigin fonksiyonu void olarak kullaniyorsun.

s.topla(sayi, sayi) int donduruyor. bu donen int i ya bir variable a ataman lazim, ya da boyle kullanacaksan fonksiyonu degistirip

return yerine number = yapman lazim.

ayni sekilde new_number cok kotu, ismi ve yaptigi isi gectim, hem int donduruyor hem de number'i esitliyor parametreye. ayni anda iki sey yaptirmak, hele birini kullanmamak, baya yanlis aklinda olsun.

da abi Int classi, new_number falan gordugum en kotu class implementation'i sanirim kusura bakma da. hoca boyle birsey falan mi istedi, neden boyle seyler yaptin ki sen?
Link to comment
Sosyal ağlarda paylaş

Penthesilea said:

cunku int yazdigin fonksiyonu void olarak kullaniyorsun.

s.topla(sayi, sayi) int donduruyor. bu donen int i ya bir variable a ataman lazim, ya da boyle kullanacaksan fonksiyonu degistirip

return yerine number = yapman lazim.

ayni sekilde new_number cok kotu, ismi ve yaptigi isi gectim, hem int donduruyor hem de number'i esitliyor parametreye. ayni anda iki sey yaptirmak, hele birini kullanmamak, baya yanlis aklinda olsun.

da abi Int classi, new_number falan gordugum en kotu class implementation'i sanirim kusura bakma da. hoca boyle birsey falan mi istedi, neden boyle seyler yaptin ki sen?
Valla direk söledikleri üzerinden yapıyorum.Classın adına kadar :)
Link to comment
Sosyal ağlarda paylaş

sen sanırım şunu yapmaya uğraştın.yaptığın yanlış şu,classın içinde tanımladığın topla fonksiyonuna parametre olarak int alıyorsun.

int topla(int d1,int d2){
return (d1+d2);
}


sonra main de iki tane obje tanımlıyorsun ve bu objeleri 3. bir objenin içine atıyosun s3.topla(s1,s2); diyerek.yapman gereken tek şey,class ın içinde tanımladığın fonksiyona integer değer değil de obje yollaman. yani mainde yine aynı şeyi yapacaksın fakat topla fonksiyonunda


int topla(Int d1,Int d2){
return d1.number + d2.number;
}


diyeceksin.Yani fonksiyonda o objelerin numberlarına erişip toplama yapacaksın
Link to comment
Sosyal ağlarda paylaş

abi niye ucuncu objenin icine atsin, ortaya cikan sonuc 2 ogrencinin GPA lerinin ortalamasi, ucuncu bir ogrenci degil ki o bilgiyi ucuncu bir ogrenci objesine atsin?
edit: pardon sanirim Int classindan bahsediyormussun, obje derken ben student'tan bahsediyorsun zannettim.

O Int class'i isi basli basina cok yanlis abi neden o yola soktunuz adami anlamadim ben hic. Hadi bari GPA olsaydi class'in adi yani Int nedir :)

hocanin ne istedigi de bir muallak da, eger yeni ogreniyorsan hocanin senden istedigi sey private member'a public method araciligiyla erisme iste, onu da getGPA() memberimiz yapiyor mesela asagida verdigim ornekte, gordugun uzere flGPA'yi donduruyor.

kisa bisey yazdim ben sadece gpa isini gostermek icin, ekstra bilgi okutman gerekiyorsa onu ayrica eklersin class'a.

ornek


#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
using namespace std;

class Student {
public:
Student() {}

float getGPA() {
return this->flGPA;
}

void setGPA(float flGPA) {
this->flGPA = flGPA;
}

private:
float flGPA;
};

float readFloat()
{
float flResult;
string strInput;
cout << "Please enter the GPA of the student. GPA must be a float value" << endl;

// verify that the input was a float
while(true) {
getline(cin, strInput);
stringstream sStream(strInput);
if(sStream >> flResult) {
break;
}
else {
cout << strInput << " is not a float, please enter a valid GPA, for example 3.83"<< endl;
cin.clear();
}
}

return flResult;
}

int main()
{
Student student1, student2;
student1.setGPA(readFloat());
student2.setGPA(readFloat());

float flAverage = (student1.getGPA() + student2.getGPA()) / 2.0f;

cout << "Their average is " << setprecision(3) << flAverage << endl;

system("PAUSE");
return 0;
}

Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...