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

using namespace std; 

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

void MyClass::printInformation() 
{ 
    return; 
} 

int main() 
{ 

    MyClass::printInformation(); 

    fgetc(stdin); 
    return(0); 
} 

Làm cách nào để gọi hàm printInformation trong main? Lỗi này cho tôi biết rằng tôi cần phải sử dụng một đối tượng lớp để làm như vậy.Chức năng thành viên gọi trong chính C++

Trả lời

20

Khai báo một thể hiện của MyClass, và sau đó gọi hàm thành viên trên dụ rằng:

MyClass m; 

m.printInformation(); 
16

Nếu bạn muốn làm cho công việc mã của bạn như trên, hàm printInformation() cần phải được tuyên bố và thực hiện như một hàm tĩnh.

Nếu, mặt khác, nó được cho là để in thông tin về một đối tượng cụ thể, trước tiên bạn cần phải tạo đối tượng.

3

Bạn cần phải tạo đối tượng từ printInformation() là không tĩnh. Hãy thử:

int main() { 

MyClass o; 
o.printInformation(); 

fgetc(stdin); 
return(0); 

} 
2

tuyên bố nó là "tĩnh" như thế này:

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

Từ câu hỏi của bạn không rõ nếu bạn muốn được sử dụng có thể lớp mà không có một bản sắc hoặc nếu gọi phương pháp này đòi hỏi bạn phải tạo một thể hiện của lớp. Điều này phụ thuộc vào việc bạn muốn thành viên printInformation viết một số thông tin chung hay cụ thể hơn về nhận dạng đối tượng.

Trường hợp 1: Bạn muốn sử dụng lớp mà không cần tạo cá thể. Các thành viên của lớp đó phải là static, bằng cách sử dụng từ khóa này bạn cho trình biên dịch biết rằng bạn muốn có thể gọi phương thức mà không phải tạo một cá thể mới của lớp.

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

Trường hợp 2: Bạn muốn lớp để có một thể hiện, trước tiên bạn cần phải tạo một đối tượng để các lớp có một bản sắc, một khi đã xong bạn có thể sử dụng các đối tượng của mình phương pháp.

Myclass m; 
m.printInformation(); 

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

Nếu bạn không biết khi nào nên sử dụng con trỏ, hãy đọc phần tóm tắt của Pukku trong số Stack Overflow question.
Xin lưu ý rằng trong trường hợp hiện tại, bạn sẽ không cần một con trỏ. :-)

0

bạn phải tạo một thể hiện của lớp để gọi phương pháp này ..

0

Trên một lưu ý chính thức, bạn cũng có thể gọi không tĩnh hàm thành viên trên là tạm thời:

MyClass().printInformation(); 

(trên một lưu ý không chính thức khác, kết thúc vòng đời của biến tạm thời (biến là quan trọng, bởi vì bạn cũng có thể gọi các hàm không phải thành viên) vào cuối biểu thức đầy đủ (";"))

Các vấn đề liên quan