Trang 1 trên tổng số 4 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 33 kết quả

Đề tài: Cách gọi một private method của một class trong C++ ??

  1. #1
    Ngày gia nhập
    09 2006
    Bài viết
    18

    Mặc định Cách gọi một private method của một class trong C++ ??

    Mọi người cho mình hỏi cách call một phương thức private của một class trong C++ như thế nào vậy , mình mò mãi mà vẫn không biết cách làm sao để call một phương thức private T_T :
    ví dụ mình có một class như sau :
    C++ Code:
    1. #include <stdlib.h>
    2. #include <iostream>
    3. using namespace std;
    4. class PrivateClass{
    5. private:
    6.     string _priString;
    7.     char* _pri2String;
    8.     void traceHello(){
    9.         cout << "Hello ^^!" <<endl;
    10.     }
    11. public:
    12.     PrivateClass():_priString("tandaica0612"),_pri2String("toilatoi"){
    13.     }
    14.  
    15. };
    16. int main(int argc, char** argv) {
    17.    //cách call private method traceHello() của class PrivateClass ???
    18. }

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    UIT
    Bài viết
    129

    Chỉ có thể gọi được public method.

  3. #3
    Ngày gia nhập
    09 2006
    Bài viết
    18

    Lý do sao lại không thể gọi được vậy bạn :( , bạn có thể giải thích cho mình được không ???

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    UIT
    Bài viết
    129

    Troi` hỏi vậy mình cũng ko biết trả lời sao nữa
    C++ quy định như vậy rồi
    Nhưng cũng có thể vòng vo một chút bằng cách tạo 1 hàm public có kiểu giống hàm private, sau đó gọi hàm private trong hàm public rồi trả về giá trị.
    Đã được chỉnh sửa lần cuối bởi Hok_bik_zi : 07-01-2009 lúc 05:11 PM.

  5. #5
    Ngày gia nhập
    09 2006
    Bài viết
    18

    Chắc là bạn hiểu nhầm ý mình rùi , đấy chỉ là lý thuyết là không dùng được private member thui , thực tế là có thể truy nhập được member private của một class , nhưng mà mình tìm mãi mà vẫn không làm cách nào để call được một private method , kể cả ép kiểu con trỏ hàm , nó chạy không đưa lỗi segment false ( viết sai tiếng anh do kém T_T ) nhưng mà nó lại chạy mà không in ra dòng chữ "Hello ^^!" :
    ví dụ về access member property private of class với ví dụ trên :
    C++ Code:
    1. /*
    2.  * File:   access_private_field.cpp
    3.  * Author: Nguyen Minh Tan
    4.  *
    5.  * Created on October 29, 2008, 12:02 PM
    6.  */
    7. #include <stdlib.h>
    8. #include <iostream>
    9. using namespace std;
    10. /*
    11.  *
    12.  */
    13. class PrivateClass{
    14. private:
    15.     string _priString;
    16.     char* _pri2String;
    17.     void traceHello(){
    18.         cout << "Hello ^^!" <<endl;
    19.     }
    20. public:
    21.     PrivateClass():_priString("tandaica0612"),_pri2String("toilatoi"){
    22.     }
    23. };
    24.  
    25. int main(int argc, char** argv) {
    26.     PrivateClass priclass;
    27.     string* mychar = (string*)&priclass;
    28.     cout << mychar[0] <<endl;
    29.     char** mychar2 = (char**)&priclass;
    30.     cout << mychar2[0] << endl;
    31.     cout << mychar2[1] <<endl;
    32.     return 0;
    33. }
    34. /*
    35. tandaica0612
    36. tandaica0612
    37. toilatoi
    38.  **/
    Đã được chỉnh sửa lần cuối bởi tandaica0612 : 07-01-2009 lúc 08:34 PM.

  6. #6
    Ngày gia nhập
    01 2008
    Nơi ở
    UIT
    Bài viết
    129

    Mặc định Cách gọi một private method của một class trong C++ ??

    Àh hiểu ý bạn rồi
    Bạn có thể dùng friend function hoặc friend class để truy cập private member của lớp khác
    Còn lại thì không có cách nào gọi trực tiếp private member từ object

  7. #7
    Ngày gia nhập
    09 2006
    Bài viết
    18

    Ủa mình tưởng cách của mình là truy cập private member property qua đối tượng chứ :( , nhưng mà vẫn chưa tìm được cách call private method , bạn nào biết solve hộ mình cái vấn đề này với :(
    Đã được chỉnh sửa lần cuối bởi tandaica0612 : 07-01-2009 lúc 08:34 PM.

  8. #8
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Trích dẫn Nguyên bản được gửi bởi tandaica0612 Xem bài viết
    Ủa mình tưởng cách của mình là truy cập private member qua đối tượng chứ :(
    có nhiều cách gọi method của một class trong cấu trúc OOP, chính vì thế mà người ta quy định ra các keyword để quy ước scope truy xuất: public, private, protected...

    xem lại nhé
    None!

  9. #9
    No Avatar
    ngocbig Khách

    Sao bạn lại muốn làm thế? Trả lời mình đc k? lol

  10. #10
    Ngày gia nhập
    09 2006
    Bài viết
    18

    @Xcross87 : thank , thế bạn có cách nào solve call private method với cách tương tự của mình truy nhập private property ở trên hem , vì mình vẫn chưa làm được , mình đã thử như sau :
    C++ Code:
    1.  
    2.     void(**myfunc)() = (void(**)())&priclass;
    3.     void(*myfunc2)() = myfunc[2];
    4.     (*myfunc2)();
    mà nó hem in ra cái chi chi gì hết trơn
    @ngocbig : mình đang tìm hiểu kỹ thuật reflection , và hạn chế của nó , tại sao trong C++ reflection lại khó khăn , vả lại theo mình nghĩ java , C# và ... ngôn ngữ # làm được , tại sao C++ không làm được ??? .
    Đã được chỉnh sửa lần cuối bởi tandaica0612 : 07-01-2009 lúc 08:47 PM.

Các đề tài tương tự

  1. Kỹ thuật C++ Tạo Unit Test Case cho private method trong C# như thế nào?
    Gửi bởi kunkka trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 12-07-2012, 05:14 PM
  2. Instance method và class method khác nhau như thế nào?
    Gửi bởi zenstorm trong diễn đàn Thắc mắc lập trình Objective-C
    Trả lời: 4
    Bài viết cuối: 24-02-2012, 09:36 AM
  3. Sử dụng private và public trong class như thế nào?
    Gửi bởi newbie.blind trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 01-11-2010, 11:41 AM
  4. lấy thuộc tính private trong class ??
    Gửi bởi balaxanh27 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 25-03-2010, 11:27 PM
  5. tai sao lại kế thừa được method private từ Form1 sang
    Gửi bởi dautomatnho trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 27-12-2009, 09:05 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn