Kế thừa Constructor

#include <iostream>
using namespace std;
 
class CPOINT
{
private :
     double x, y;
public :
     CPOINT()
     {
         x = y = 0.0;
     }
     CPOINT( double x,  double y)
     {
         this ->x = x;
         this ->y = y;
     }
     void show_xy()
     {
         cout <<  "(x, y) = (" << x <<  ", " << y <<  ")" << endl; 
     } 
}; 
 
class CCIR :  public CPOINT 
{ 
private : 
     double r; 
public : 
     CCIR() { r = 0.0; } 
     CCIR( double x,  double y,  double r) : CPOINT(x, y) 
     { 
         this ->r = r;
     }
     void show_r()
     {
         cout <<  "r = " << r << endl;
     }
};
 
int main () 
{
     CCIR circle(2.3, -5, 6.0);
     circle.show_xy();
     circle.show_r();
 
     system ( "pause" );
     return 0;
}

Mình có chương trình trên, mình không hiểu vì sao x,y là biến private của lớp CPOINT, như vậy thì lớp CCIR đâu có kế thừa đc, vậy mà sao sau khi constructor CCIR xong , vẫn có thể show ra đc x,y như bình thường ? Mong mn giải đáp . Please

Mình không biết về C++
Theo mình thấy biến x,y là biến private không thể truy cập trực tiếp từ lớp con được. Nhưng cái show_xy() lại là public method nên vẫn gọi được thôi.

2 Likes

Đúng là x,y là biến private nên ko kế thừa được. Nhưng mà,
Rõ ràng là kế thừa hàm CPOINT mà do nó public nên hợp lệ thôi. còn show_xy() cũng là kế thừa do nó public.

2 Likes

show_xy() vì nó là public nên nó gọi ngược lại từ cha được. khi CCIR được khởi tạo thì constructor của lớp cha cũng được gọi nên x,y cũng có giá trị.

2 Likes

x, y vẫn nằm trong đó, nhưng subclass không làm gì được mà phải thông qua superclass.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?