Cần giúp đỡ để hiểu hơn về tính kế thừa trong OOP C++


Mình đang rất mơ hồ về tính kế thừa . Ở ví dụ trên đề yêu cầu kế thừa từ lớp số thực cha . lớp kế thừa số thực con khởi tạo thêm phương thức cộng và trừ số thực , mình rất mông lung là ở lớp cha mình có định kiểu với 2 từ khóa protected và public thì xuống đến lớp con 2 thằng kia sẽ được sở hữu với lớp con nhưng với dạng là protected điều này có nghĩa là khi gọi hàm dưới main thì sẽ có thể gọi được . Cao nhân thông não cho mình và fix lỗi giúp mình . thanks @@

Complex number là concrete class mà, làm sao mà kế thừa được. Mà có kế thừa nó cũng vô nghĩa.

4 Likes

bạn giải thích kĩ hơn được không ? mình k hiểu ý

bạn giúp mình với @@muốn fix thị lại xây dựng hàm public con riêng ra à bạn , hay có cách nào fix đc k nhỉ

tại sao ko viết operator± trong class cha luôn kế thừa chi vậy :V

3 Likes

?? mình định nghĩa bên ngoài chứ mình có để kế thừa đâu ??

sao ko khai báo operator+ cho class complex_Num mà lại đi khai báo cho class complex_Num1???

kế thừa chỉ dùng để xài đa hình, em ko xài đa hình thì đừng kế thừa lung tung.

2 Likes

à cái đấy là do đề bài yêu cầu bạn ạ :frowning: xin lỗi mình hiểu nhầm câu hỏi

đưa cái đề kì cục đó đây :V :V

2 Likes

đại khái là đề y/c : tạo một lớp complex num cha sử dụng chồng toán tử nhập xuất , lớp complex num1 kế thừa từ cha và thêm phương thức chồng toán tử +; -

Concrete Class dùng cho những kiểu dữ liệu giống với built-in type của C++, như int, long, string, array.

Complex number là 1 dạng number system, cùng dạng với real number (float, double), integer (int). Sử dụng int, float như thế nào thì sử dụng complex như thế đó:

  • Biến int sử dụng trên stack thì complex cũng sử dụng trên stack.
  • Khai báo int, float thế nào thì khai báo complex như thế.
    • int x, y{5};
    • Complex x, y{2,1};
  • x + y, x - y, x * y, x / y hoạt động như nhau, bất kể x, y là int, float, hay complex.

Để làm được những list trên thì chỉ có cách khai báo complex là 1 concrete class thôi, nơi khai báo (interface) cũng là nơi hiện thực (implementation).

4 Likes

vậy thì khác gì copy paste đây xài kế thừa làm gì :V đề kì cục :V

sửa lại ở chỗ khai báo operator+/- tham số là complex_Num1 chứ ko phải complex_Num. Coi như class complex_Num ko tồn tại :V :V :V

2 Likes

làm thế thì giải quyết đc vấn đề nhưng lại sai so với y/c đề bài :frowning:

mình sửa rồi , như vậy khi gọi hàm ở main thì thằng complex1 lại không có phương thức nhập xuất ??

sửa thêm chỗ num1 phải kế thừa public num. Đề yêu cầu kế thừa protected à? :V :V

class num1 : public num

đề tầm bậy nghỉ học hoàn tiền lại đi em :V

4 Likes

k kế thừa protected là mình tự nghĩ . tại vì mình nghĩ nếu sử dụng public nghĩa là thằng con kế thừa public của cha làm public của con thì xuống lại định nghĩa lại đối tượng public th con :frowning: thế khác gì cha ??

có lẽ 99.99% kế thừa trong C++ là kế thừa public. Kế thừa private/protected hầu như ko xài :V

4 Likes

à rồi cảm ơn bạn :slight_smile: được ròi , mình đang hiểu sai . Minh đang hiểu là khi kế thừa public thì chỉ được nguyên public thôi :smile: mình quên mât trên định nghĩa đối tượng mình đang để prodected :ok_man:

2 Likes

Theo mình biết thì private thì chỉ được truy cập trong cùng 1 class.

Còn protected thì có thể truy cập trong class và ở các class con của class đó. Ngoài các class kể trên thì không thể truy cập được

Ở complexNum1 kia, bác đang truy cập vào thuộc tính phanthuc và phanao (protected) ở ngoài class con cũng như ngoài class của chính nó, nên lỗi là phải thôi.

Hihi

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