Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Làm sao để truy xuất thuộc tính private của lớp cha

  1. #1
    Ngày gia nhập
    07 2011
    Bài viết
    10

    Red face Làm sao để truy xuất thuộc tính private của lớp cha

    Nhờ các bạn giải hộ mình bài này:
    -tạo lớp d2 là tọa độ các điểm trong không gian 0xy yêu cầu:
    +tọa độ là thuộc tính private
    +hàm thiết lập với tham số mặc định
    +đa năng hóa toán tử >>,<< để nhập và xuất dữ liệu
    +kiểm tra xem điểm A thuộc d2 nằm ở vị trí như thế nào với đường tròn(Tâm 0, bk = 1)
    -Tạo lớp d3 kế thừa lớp d2 là tọa độ các điểm trong không gian 0xyz yêu cầu:
    +tọa độ là thuộc tính private
    +hàm thiết lập với tham số mặc định
    +đa năng hóa toán tử >>,<< để nhập và xuất dữ liệu
    +kiểm tra xem điểm B thuộc d3 nằm ở vị trí như thế nào với mặt cầu (Tâm 0, bk = 1)

    =>Các bạn giải nhanh hộ mình với nha, sắp thi rồi, mình không hiểu truy xuất tới thuộc tính private của lớp d2 như thế nào nên không làm được? Thanks các bạn nhiều

  2. #2
    Ngày gia nhập
    08 2011
    Bài viết
    98

    muốn truy cập các thuộc tính private thì tại class ta viết các phương thức get set để encapsulation nó.
    get để lấy và set để gán.
    Nghe Metal và dịch thơ
    lttqstudy.wordpress.com

  3. #3
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Để mình giải thích rõ hơn một chút ý của bạn Ittq

    - Chỉ có các phương thức của lớp (+ friend function) mới đc phép truy xuất tới các dữ liệu private của lớp
    - Giả sử như thành phần dữ liệu của lớp là: private: int data;
    ------> Để truy xuất x người ta hay dùng phương thức getData () (tuy là phương thức tự xây dựng nhưng để truy xuất data người ta hay đặt tên là get... : Quy ước cho dễ dùng )
    C++ Code:
    1. int getData ()
    2. {
    3.     return data;
    4. }

    - Không chỉ có các thành phần ngoài class mới không được dùng private của lớp. Mà các thành phần của lớp cũng tránh dùng trực tiếp nó
    - Lý do: Còn kiểm tra điều kiện ................ Bây giờ getData () chính là cái dữ liệu data (ở mức private)
    Đã được chỉnh sửa lần cuối bởi beautifulsoul84hung : 21-10-2011 lúc 06:16 PM.

  4. #4
    Ngày gia nhập
    07 2011
    Bài viết
    10

    Giả sử ở lớp d2 mình có các toán tử nhập và xuất như sau:
    C++ Code:
    1. friend istream &operator >> (istream &in, d2 &c)
    2.         {
    3.             cout<<"Nhap toa do x, y \n";
    4.             in>>c.x;
    5.             in>>c.y;
    6.             return in;
    7.         }
    8.         friend ostream &operator << (ostream &out , d2 &c)
    9.         {
    10.             cout<<"Toa do x,y la " ;
    11.             out<<c.x;
    12.             out<<c.y;
    13.             return out;
    14.         }
    Bây giờ ở lớp d3 kế thừa của lớp d2 mình phải làm thế nào để nhập và xuất

    //---

    C++ Code:
    1. #include<iostream.h>
    2. #include<math.h>
    3. class d2
    4. {
    5.     float x,y;
    6.     public:
    7.         d2(float x=0,float y=0)
    8.         {
    9.             x=x;
    10.             y=y;
    11.         }
    12.         float getx()
    13.         {
    14.             return x;
    15.         }
    16.         float gety()
    17.         {
    18.             return y;
    19.         }
    20.            float dodai()
    21.         {
    22.             return sqrt(x*x+y*y);//khoang cach tu diem toi goc toa do
    23.         }
    24.         void vitri()
    25.         {
    26.             if(dodai()>1) cout<<"Ngoai "<<endl;
    27.                 if(dodai()==1)cout<<"Tren \n";
    28.                 if(dodai()<1)cout<<"Trong \n";
    29.         }
    30.         friend istream &operator >> (istream &in, d2 &c)
    31.         {
    32.             cout<<"Nhap toa do x, y \n";
    33.             in>>c.x;
    34.             in>>c.y;
    35.             return in;
    36.         }
    37.         friend ostream &operator << (ostream &out , d2 &c)
    38.         {
    39.             cout<<"Toa do x,y la " ;
    40.             out<<c.x;
    41.             out<<c.y;
    42.             return out;
    43.         }
    44. };
    45. class d3:d2
    46. {
    47.     float z;
    48.     public:
    49.         d3(float x=0,float y=0,float z=0):d2(x,y)
    50.         {
    51.             z=z;
    52.             cout<<x<<y<<z;
    53.         }
    54.         float getz()
    55.         {
    56.             return z;
    57.         }
    58.  
    59.         friend istream &operator >> ( istream &in, d3 &c)
    60.         {
    61.  
    62.         }
    63.         friend ostream &operator << (ostream &out , d3 &c)
    64.         {
    65.  
    66.  
    67.         }
    68.  
    69. };
    70. void main()
    71. {
    72.  
    73.  
    74. }

    Đây là code của mình các bạn hoàn thiên nốt giùm mình với
    Đã được chỉnh sửa lần cuối bởi beautifulsoul84hung : 21-10-2011 lúc 07:06 PM. Lý do: làm liền

  5. #5
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Lớp cha chỉ cần thay private thành protected thì lớp con sẽ truy xuất được.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  6. #6
    Ngày gia nhập
    07 2011
    Bài viết
    10

    Mặc định Làm sao để truy xuất thuộc tính private của lớp cha

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Lớp cha chỉ cần thay private thành protected thì lớp con sẽ truy xuất được.
    Bắt buộc phải để private bạn à

  7. #7
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mình thấy kiến trúc này ko ổn tí nào hết. Đã bắt buộc private tức là ko muốn lớp con truy cập, ko muốn người ngoài truy cập. Bạn lại cố lấy ra truy xuất. Như thế thì private cũng có ý nghĩa nữa đâu, ko khác gì protected cả. Vậy tại sao ko dùng protected ?
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  8. #8
    Ngày gia nhập
    07 2011
    Bài viết
    10

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Mình thấy kiến trúc này ko ổn tí nào hết. Đã bắt buộc private tức là ko muốn lớp con truy cập, ko muốn người ngoài truy cập. Bạn lại cố lấy ra truy xuất. Như thế thì private cũng có ý nghĩa nữa đâu, ko khác gì protected cả. Vậy tại sao ko dùng protected ?
    Đề bài ra vậy giờ làm thế nào bây giờ

  9. #9
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi luongvancong Xem bài viết
    Nhờ các bạn giải hộ mình bài này:
    -tạo lớp d2 là tọa độ các điểm trong không gian 0xy yêu cầu:
    +tọa độ là thuộc tính private
    +hàm thiết lập với tham số mặc định
    +đa năng hóa toán tử >>,<< để nhập và xuất dữ liệu
    +kiểm tra xem điểm A thuộc d2 nằm ở vị trí như thế nào với đường tròn(Tâm 0, bk = 1)
    -Tạo lớp d3 kế thừa lớp d2 là tọa độ các điểm trong không gian 0xyz yêu cầu:
    +tọa độ là thuộc tính private
    +hàm thiết lập với tham số mặc định
    +đa năng hóa toán tử >>,<< để nhập và xuất dữ liệu
    +kiểm tra xem điểm B thuộc d3 nằm ở vị trí như thế nào với mặt cầu (Tâm 0, bk = 1)

    =>Các bạn giải nhanh hộ mình với nha, sắp thi rồi, mình không hiểu truy xuất tới thuộc tính private của lớp d2 như thế nào nên không làm được? Thanks các bạn nhiều
    Trích dẫn Nguyên bản được gửi bởi luongvancong Xem bài viết
    Đề bài ra vậy giờ làm thế nào bây giờ
    Theo mình thì đề ko bắt bạn phải làm việc đó, tại bạn tự nghĩ ra nó như thế thôi. Bài của bạn chỉ cần làm như thế này thôi là được :

    C++ Code:
    1. #include <iostream.h>
    2. #include <conio.h>
    3.  
    4.  
    5. class d2
    6. {
    7.     private:
    8.         int x, y;
    9.  
    10.     public:
    11.         d2(int x = 0, int y = 0)
    12.         {
    13.             this->x = x;
    14.             this->y = y;
    15.         }
    16.  
    17.         friend istream & operator >> (istream &is, d2 &v)
    18.         {
    19.             is>> v.x >> v.y;
    20.             return is;
    21.         }
    22.  
    23.         friend ostream & operator << (ostream &os, d2 &v)
    24.         {
    25.             os<< v.x << "," << v.y;
    26.             return os;
    27.         }
    28. };
    29.  
    30. class d3 : public d2
    31. {
    32.     private:
    33.         int z;
    34.  
    35.     public:
    36.         d3(int x = 0, int y = 0, int z = 0) : d2(x, y)
    37.         {
    38.             this->z = z;
    39.         }
    40.  
    41.         friend istream & operator >> (istream &is, d3 &v)
    42.         {
    43.             is>> (d2&)v >> v.z;
    44.             return is;
    45.         }
    46.  
    47.         friend ostream & operator << (ostream &os, d3 &v)
    48.         {
    49.             os<< (d2)v << "," << v.z;
    50.             return os;
    51.         }
    52. };
    53.  
    54.  
    55. void main()
    56. {
    57.     d3 a;
    58.  
    59.     cin>>a;
    60.     cout<< "(" << a << ")" << endl;
    61.  
    62.     getch();
    63.  
    64. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  10. #10
    Ngày gia nhập
    07 2011
    Bài viết
    10

    Đề bài bắt buộc vậy mà, mình cũng có thích như vậy đâu

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

  1. Cách truy xuất đến thuộc tính của control được tạo động?
    Gửi bởi kid_1412 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 17-12-2012, 06:01 PM
  2. Lập trình C++ Truy xuất thuộc tính trong pravite của 1 lớp từ 1 lớp khác
    Gửi bởi scopion93 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 13-09-2012, 06:26 PM
  3. Lập trình C++ class vector , không truy xuất các phần tử của private được!
    Gửi bởi code_c trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 02-01-2012, 07:30 AM
  4. Lỗi private trong việc truy xuất lớp
    Gửi bởi small_ant trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 28-09-2010, 08:19 PM
  5. C++ bị lỗi khi truy xuất thuộc tính protected từ lớp thừa kế
    Gửi bởi trai-ha-thanh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 26-07-2010, 07:03 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