2009-03-25 15 views
6
#include <iostream> 

using namespace std; 

class MyClass 
{ 
public: 
     void printInformation(); 
}; 

void MyClass::printInformation() 
{ 
    return; 
} 

int main() 
{ 

    MyClass::printInformation(); 

    fgetc(stdin); 
    return(0); 
} 

main içinde printInformation işlevini nasıl arardım? Hata, bunu yapmak için bir sınıf nesnesi kullanmam gerektiğini söyledi.Ana C++ dahilinde Üye İşlevlerini Çağırmak C++

cevap

20

Sınıfım bir örneği bildirin ve ardından bu örneğinde üye işlevini çağırır:

MyClass m; 

m.printInformation(); 
16

Eğer yukarıdaki gibi kod çalışması için, fonksiyon printInformation() bildirilen ve uygulanması gerekmektedir statik bir işlev. Öte yandan, belirli bir nesne hakkında bilgi yazdırması gerekiyorsa, önce nesneyi oluşturmanız gerekir.

3

printInformation() sabit olmadığı için bir nesne oluşturmanız gerekir. Deneyin:

int main() { 

MyClass o; 
o.printInformation(); 

fgetc(stdin); 
return(0); 

} 
2

bu gibi "statik" beyan: Sorunuza itibaren

static void MyClass::printInformation() { return; } 
11

Eğer bir kimlik olmadan veya eğer sınıf edebilmek kullanım olmasını istiyorsanız o belli değil yöntemini çağırarak gerektirir sınıfın bir örneğini oluşturmak. Bu, printInformation üyesinin belirli bir genel bilgi yazmasını veya nesne kimliği hakkında daha spesifik olmasını isteyip istemediğinize bağlıdır.

Durum 1: Bir örneğini yaratmadan sınıf kullanmak istiyorum. Bu sınıfın üyeleri statik olmalıdır, bu anahtar sözcüğünü kullanarak derleyiciye, sınıfın yeni bir örneğini oluşturmak zorunda kalmadan yöntemi çağırmak istediğinizi söylersiniz.

class MyClass 
{ 
public: 
    static void printInformation(); 
}; 

Durum 2: Sen, bu nedenle sınıf bir kimliğe sahip olması gerekir bir nesne oluşturmak ve tamamlandığında nesneyi kullanabilirsiniz için öncelikle ihtiyaç örneği sahip olmak sınıfı istiyoruz onun yöntemleri.

Myclass m; m.printInformation(); // Or, in the case that you want to use pointers: Myclass * m = new Myclass(); m->printInformation(); 

Eğer işaretçileri ne zaman kullanılacağını bilmiyorsanız

, bu Stack Overflow question yılında Pukku en özetini okuyun.
Lütfen mevcut durumda bir işaretçiye ihtiyacınız olmayacağını unutmayın. :-)

0

Eğer yöntemini çağırmak için sınıfın bir örneğini oluşturmak zorunda .. gayrı kayda göre

0

, ayrıca geçicilere üzerinde statik olmayan üye işlevleri çağırabilirsiniz:

MyClass().printInformation(); 

(bir başka gayri resmi notta, geçici değişkenin kullanım ömrünün sonuna gelindiğinde (değişken, const olmayan üye işlevlerini de çağırabilirsiniz), tam ifadenin sonunda gelir (";"))

İlgili konular