VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • C#
  • Python
  • PHP
  • Excel
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • HTML5
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Eclipse
    • Phần mềm tiện ích
    • Cấu trúc DL&GT
    • Selenium Test

C++ Cơ Bản

Ngôn ngữ lập trình C++ là gì? Lịch sử của C++ Các tính năng của C++ Cài đặt môi trường lập trình C++ Chương trình C++ đầu tiên Biến trong C++ Các kiểu dữ liệu trong C++ Ép kiểu trong C++ Từ khóa trong C++ Các toán tử trong C++ Comment trong C++ Các hằng số trong C++ count, cin và endl trong C++ Ký tự đặc biệt trong C++ Namespace trong C++ Template trong C++ Modifier trong C/C++

Câu Lệnh Điều Khiển C++

Mệnh đề if-else Mệnh đề switch Vòng lặp for Vòng lặp while Vòng lặp do-while Lệnh Break Lệnh Continue Lệnh Goto

C++ Function

Hàm trong C++ Hàm do người dùng định nghĩa Các kiểu hàm trong C++ Đệ quy trong C++ Call by value Call by reference

C++ Array

Mảng (array) trong C++ Mảng 2 chiều trong C++ Truyền mảng vào hàm

C++ Poiter

Con trỏ trong C++ Con trỏ Null trong C++ Con trỏ số học trong C++ Con trỏ và mảng trong C++ Mảng con trỏ trong C++ Con trỏ tới con trỏ trong C++ Truyền con trỏ tới hàm trong C++ Trả về con trỏ từ hàm trong C++

C++ Lớp Object

Khái niệm lập trình hướng đối tượng trong C++ Lớp và đối tượng trong C++ Constructor trong C++ Destructor trong C++ this trong C++ static trong C++ struct trong C++ Enumeration trong C++ Hàm Friend trong C++ Hàm Math trong C++ Tính kế thừa trong C++ Tính đa hình trong C++ Tính trừu tượng trong C++ Tính đóng gói trong C++ Interface trong C++

Nạp Chồng Toán Tử

Nạp chồng toán tử và Nạp chồng hàm trong C++ Nạp chồng toán tử một ngôi trong C++ Nạp chồng toán tử nhị phân trong C++ Nạp chồng toán tử quan hệ trong C++ Nạp chồng toán tử Input/Output trong C++ Nạp chồng toán tử ++ và -- trong C++ Nạp chồng toán tử gán trong C++ Nạp chồng toán tử gọi hàm () trong C++ Nạp chồng toán tử subscript [] trong C++ Nạp chồng toán tử truy cập thành viên lớp (->) trong C++

Lập Trình C++

Xử lý ngoại lệ trong C++ Đa luồng trong C++
Bài Tập C++ Có Lời Giải
1 / 3
❮ ❯

Tính kế thừa trong C++


Con trỏ this trong C++
Tính đa hình trong C++

Nội dung chính

  • Tính kế thừa trong C++
  • Lớp cơ sở (Base Class) và Lớp thừa kế (Derived Class) trong C++
  • Điều khiển truy cập và Tính kế thừa trong C++
  • Kiểu kế thừa trong C++
  • Đa kế thừa trong C++

Tính kế thừa trong C++

Một trong những khái niệm quan trọng nhất trong lập trình hướng đối tượng là Tính kế thừa (Inheritance). Kế thừa trong C++ là sự liên quan giữa hai class với nhau, trong đó có class cơ sở (Base Class) và class con (Derived Class). Khi kế thừa class con được hưởng tất cả các phương thức và thuộc tính của class cơ sở. Tuy nhiên, nó chỉ được truy cập các thành viên public và protected của class cơ sở. Nó không được phép truy cập đến thành viên private của class cơ sở.

Tư tưởng của kế thừa trong C++ là có thể tạo ra một class mới được xây dựng trên các lớp đang tồn tại. Khi kế thừa từ một lớp đang tồn tại bạn có sử dụng lại các phương thức và thuộc tính của lớp cơ sở, đồng thời có thể khai báo thêm các phương thức và thuộc tính khác.



Lớp cơ sở (Base Class) và Lớp thừa kế (Derived Class) trong C++

Một lớp có thể được kế thừa từ hơn một lớp khác, nghĩa là, nó có thể kế thừa dữ liệu và hàm từ nhiều lớp cơ sở. Để định nghĩa một lớp kế thừa (Derived Class), chúng ta sử dụng một danh sách để xác định các lớp cơ sở. Danh sách này liệt kê một hoặc nhiều lớp cơ sở và có form sau:


class lop_ke_thua: access_modifier lop_co_so

Ở đây, access_modifier là public, protected hoặc private, và lop_co_so là tên của lớp đã được định nghĩa trước đó. Nếu access_modifier không được sử dụng, thì mặc định là private.

Bạn xem xét ví dụ sau với Hinh là lớp cơ sở và HinhChuNhat là lớp kế thừa:


#include <iostream>
 
using namespace std;
// lop co so: Hinh
class Hinh {
   public:
      void setChieuRong(int rong) {
         chieuRong = rong;
      }
      void setChieuDai(int dai) {
         chieuDai = dai;
      }
   protected:
      int chieuRong;
      int chieuDai;
};

// day la lop ke thua: HinhChuNhat
class HinhChuNhat: public Hinh {
   public:
      int tinhDienTich() { 
         return chieuRong * chieuDai; 
      }
};

int main(void) {
   HinhChuNhat hcn;
 
   hcn.setChieuRong(10);
   hcn.setChieuDai(15);
   // in dien tich cua doi tuong.
   cout << "Dien tich HCN la: " << hcn.tinhDienTich() << endl;
   return 0;
}

Biên dịch và chạy chương trình C++ trên sẽ cho kết quả sau:

Tính kế thừa trong C++

Điều khiển truy cập và Tính kế thừa trong C++

Một lớp kế thừa có thể truy cập tất cả thành viên không phải là private của lớp cơ sở của nó. Vì thế, các thành viên lớp cơ sở, mà là hạn chế truy cập tới các hàm thành viên của lớp kế thừa, nên được khai báo là private trong lớp cơ sở.

Chúng ta tổng kết các kiểu truy cập khác nhau, tương ứng với ai đó có thể truy cập chúng như sau:

Truy cập public protected private
Trong cùng lớp Có Có Có
Lớp kế thừa Có Có Không
Bên ngoài lớp Có Không Không

Một lớp kế thừa (Derived Class) sẽ kế thừa tất cả các phương thức của lớp cơ sở, ngoại trừ:

  • Constructor, destructor và copy constructor của lớp cơ sở.

  • Overloaded operator (toán tử nạp chồng) của lớp cơ sở.

  • Hàm friend của lớp cơ sở.



Kiểu kế thừa trong C++

Khi kế thừa từ một lớp cơ sở, lớp cơ sở đó có thể được kế thừa thông qua kiểu kế thừa là public, protected hoặc private. Kiểu kế thừa trong C++ được xác định bởi Access-specifier đã được giải thíc ở trên.

Chúng ta hiếm khi sử dụng kiểu kế thừa protected hoặc private, nhưng kiểu kế thừa public thì được sử dụng phổ biến hơn. Trong khi sử dụng các kiểu kế thừa khác sau, bạn nên ghi nhớ các quy tắc sau:

  • Kiểu kế thừa Public: Khi kế thừa từ một lớp cơ sở là public, thì các thành viên public của lớp cơ sở trở thành các thành viên public của lớp kế thừa; và các thành viên protected của lớp có sở trở thành các thành viên protected của lớp kế thừa. Một thành viên là private của lớp cơ sở là không bao giờ có thể được truy cập trực tiếp từ một lớp kế thừa, nhưng có thể truy cập thông qua các lời gọi tới các thành viên public và protected của lớp cơ sở đó.

  • Kiểu kế thừa protected: Khi kế thừa từ một lớp cơ sở là protected, thì các thành viên public và protected của lớp cơ sở trở thành các thành viên protected của lớp kế thừa

  • Kiểu kế thừa private: Khi kế thừa từ một lớp cơ sở là private, thì các thành viên public và protected của lớp cơ sở trở thành các thành viên private của lớp kế thừa


Đa kế thừa trong C++

Một lớp trong C++ có thể kế thừa các thành viên từ nhiều lớp, và đây là cú pháp:


class lop_ke_thua: access_modifier lop_co_so_1, access_modifier lop_co_so_2 ...

Tại đây, access_modifier là public, protected hoặc private và sẽ được cung cấp cho mỗi lớp cơ sở, và chúng sẽ được phân biệt với nhau bởi dấu phảy như trên. Bạn thử ví dụ sau:


#include <iostream>
 
using namespace std;// lop co so: Hinh
class Hinh {
   public:
      void setChieuRong(int rong)
      {
         chieuRong = rong;
      }
      void setChieuDai(int dai)
      {
         chieuDai = dai;
      }
   protected:
      int chieuRong;
      int chieuDai;
};

// lop co so: ChiPhiSonMau
class ChiPhiSonMau {
   public:
      int tinhChiPhi(int dienTich, int donGia) {
         return dienTich * donGia;
      }
};

// day la lop ke thua: HinhChuNhat
class HinhChuNhat: public Hinh, public ChiPhiSonMau {
   public:
      int tinhDienTich() { 
         return chieuRong * chieuDai; 
      }
};

int main(void) {
   HinhChuNhat hcn;
   int dienTich;
   int donGia = 200000;
 
   hcn.setChieuRong(15);
   hcn.setChieuDai(30);
   dienTich = hcn.tinhDienTich();
   
   // in dien tich cua doi tuong.
   cout << "Tong dien tich la: " << 
      hcn.tinhDienTich() << " m2." << endl;
   // in tong chi phi de son mau
   cout << "Tong chi phi de son mau la: " << 
      hcn.tinhChiPhi(dienTich, donGia) << " VND." << endl;
    return 0;
}

Biên dịch và chạy chương trình C++ trên sẽ cho kết quả sau:

Tính kế thừa trong C++
Con trỏ this trong C++
Tính đa hình trong C++

Recent Updates

Sắp Tết 2024 Rồi! - Còn bao nhiêu ngày nữa là đến tết 2024?Đa luồng trong C++Xử lý ngoại lệ trong C++Nạp chồng toán tử truy cập thành viên lớp (->) trong C++Nạp chồng toán tử subscript [] trong C++Nạp chồng toán tử gọi hàm () trong C++Nạp chồng toán tử gán trong C++Nạp chồng toán tử ++ và -- trong C++Nạp chồng toán tử Input/Output trong C++Nạp chồng toán tử quan hệ trong C++Nạp chồng toán tử nhị phân trong C++Nạp chồng toán tử một ngôi trong C++Nạp chồng toán tử và Nạp chồng hàm trong C++

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn
Danh Sách Bài Học

Học Java | Hibernate | Spring
Học Excel | Excel VBA
Học Servlet | JSP | Struts2
Học C | C++ | C#
Học Python
Học SQL

Bài Tập Có Lời Giải

Bài tập Java
Bài tập C
Bài tập C++
Bài tập C#
Bài tập Python
Ví dụ Excel VBA

Câu Hỏi Phỏng Vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml