Latest web development tutorials
×

C++ หลักสูตร

C++ หลักสูตร C++ แนะนำโดยย่อ C++ การตั้งค่าสภาพแวดล้อม C++ ไวยากรณ์พื้นฐาน C++ หมายเหตุ C++ ชนิดข้อมูล C++ ประเภทตัวแปร C++ ขอบเขตตัวแปร C++ คงที่ C++ ประเภทการปรับเปลี่ยน C++ ประเภทการจัดเก็บ C++ ผู้ประกอบการ C++ การไหลเวียน C++ ผู้พิพากษา C++ ฟังก์ชัน C++ ดิจิตอล C++ แถว C++ เชือก C++ ชี้ C++ อ้างอิง C++ วันที่และเวลา C++ เอาท์พุทหรือ Basic Input C++ โครงสร้างข้อมูล

C++ เชิงวัตถุ

C++ คลาสและวัตถุ C++ สืบทอด C++ ผู้ประกอบการมากเกินไปและการทำงานมากเกินไป C++ polymorphism C++ ข้อมูลที่เป็นนามธรรม C++ ข้อมูล encapsulation C++ อินเตอร์เฟซ(ระดับนามธรรม)

C++ การสอนที่ทันสมัย

C++ แฟ้มและสตรีม C++ การจัดการข้อยกเว้น C++ หน่วยความจำแบบไดนามิก C++ namespaces C++ แบบ C++ preprocessor C++ การประมวลผลสัญญาณ C++ multithreading C++ Web โครงการ

C++ กรุ

C++ STL หลักสูตร C++ ห้องสมุดมาตรฐาน C++ ทรัพยากรที่มีประโยชน์

c ++ มรดก

การเขียนโปรแกรมเชิงวัตถุเป็นแนวคิดที่สำคัญที่สุดคือการสืบทอด มรดกช่วยให้เราสามารถกำหนดระดับที่ตามชั้นอื่นซึ่งจะทำให้การสร้างและรักษาโปรแกรมที่ง่ายขึ้น จะทำเช่นนั้นก็มาถึงนำมาใช้ใหม่ของการทำงานของรหัสและปรับปรุงผลเวลาดำเนินการ

เมื่อคุณสร้างชั้นคุณไม่จำเป็นต้องเขียนข้อมูลสมาชิกและฟังก์ชั่นสมาชิกใหม่เพียงแค่ระบุชั้นเรียนใหม่ได้รับมรดกเป็นสมาชิกที่มีอยู่ของชั้นเรียนสามารถชั้นที่มีอยู่จะเรียกว่าชั้นฐานชั้นใหม่ที่เรียกว่าชั้นเรียนมา

มรดกเป็นตัวแทนของความสัมพันธ์ยกตัวอย่างเช่นการเลี้ยงลูกด้วยนมเป็นสัตว์ที่เลี้ยงลูกด้วยนมสุนัขจึงสุนัขเป็นสัตว์และอื่น ๆ

และมาชั้นฐานชั้น

ชั้นจะได้รับจากระดับมากกว่าหนึ่งซึ่งหมายความว่ามันสามารถรับข้อมูลและฟังก์ชั่นจากฐานเรียนหลาย กำหนดชั้นมาเราใช้รายการเรียนมาเพื่อระบุชั้นฐาน รายการรากศัพท์ชั้นชั้นฐานหนึ่งหรือมากกว่าหนึ่งชื่อรูปแบบต่อไปนี้:

class derived-class: access-specifier base-class

ประเด็นการเข้าถึงปรับปรุงการเข้าถึงระบุเป็นของประชาชนได้รับการคุ้มครองหรือเอกชนฐานชั้นก่อนที่จะมีการกำหนดชื่อของชั้นเรียนหากไม่มีการปรับปรุงการเข้าถึงการเข้าถึงระบุเริ่มต้นมีความเป็นส่วนตัว

สมมติว่าคุณมีรูปร่างที่ชั้นฐานสี่เหลี่ยมคลาสที่ได้รับของดังต่อไปนี้:

#include <iostream>
 
using namespace std;

// 基类
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 派生类
class Rectangle: public Shape
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   return 0;
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

Total area: 35

ควบคุมการเข้าถึงและการถ่ายทอดทางพันธุกรรม

ชั้นเรียนมาสามารถเข้าถึงชั้นฐานสำหรับสมาชิกที่ไม่ใช่เอกชนทั้งหมด ดังนั้นถ้าคุณต้องการที่จะเป็นสมาชิกคนหนึ่งของฟังก์ชันสมาชิกระดับฐานของการเข้าถึงชั้นเรียนมาควรจะประกาศในฐานชั้นที่มีความเป็นส่วนตัว

เราสามารถสรุปสิทธิการเข้าถึงที่แตกต่างกันตามชนิดของการเข้าถึงดังต่อไปนี้:

访问publicprotectedprivate
同一个类yesyesyes
派生类yesyesno
外部的类yesnono

คลาสที่ได้รับสืบทอดมาทุกวิธีการเรียนฐานยกเว้นในกรณีต่อไปนี้:

  • คอนสตรัคชั้นฐานและ destructor และคัดลอกคอนสตรัค
  • ผู้ประกอบการมากเกินไปชั้นฐานของ
  • เพื่อนคนหนึ่งของฟังก์ชั่นชั้นฐาน

ประเภทของการรับมรดก

เมื่อชั้นได้มาจากชั้นฐานชั้นฐานสามารถสืบทอดเป็นสาธารณะคุ้มครองหรือประเภทส่วนตัวผ่านคำอธิบายข้างต้นคือการสืบทอดชนิดของการเข้าถึงปรับปรุงการเข้าถึงระบุเพื่อระบุ

เราแทบจะไม่ได้ใช้หรือได้รับการคุ้มครองมรดกส่วนตัวมักจะใช้มรดกสาธารณะเมื่อความแตกต่างของมรดกปฏิบัติตามกฎต่อไปนี้:

  • ระดับสมาชิกได้รับการคุ้มครองเมื่อมีระดับมาจากชั้นฐานสาธารณะสมาชิกของประชาชนระดับฐานที่ได้มาเป็นสมาชิกของประชาชนระดับสมาชิกป้องกันชั้นฐานเป็นชั้นที่ได้มาจากสมาชิกของเอกชนชั้นฐานไม่สามารถได้รับโดยตรง:มรดกสาธารณะ (สาธารณะ) การเข้าถึงแต่สามารถเข้าถึงได้โดยการเรียกสมาชิกของประชาชนและการป้องกันจากระดับฐาน
  • มรดกที่มีการป้องกัน (ป้องกัน): เมื่อชั้นที่ได้มาจากการป้องกันชั้นฐานสมาชิกของประชาชนและการป้องกันของชั้นฐานจะกลายเป็นสมาชิกในการป้องกันจากชั้นเรียนมา
  • มรดกเอกชน (ส่วนตัว): เมื่อชั้นได้มาจากชั้นฐานสมาชิกเอกชนประชาชนและการป้องกันของชั้นฐานจะต้องเป็นสมาชิกของเอกชนชั้นเรียนมา

มรดกหลาย

มรดกหลายที่เป็นคลาสย่อยสามารถมีระดับผู้ปกครองมากกว่าหนึ่งที่สืบทอดลักษณะของระดับผู้ปกครองมากกว่าหนึ่ง

คลาส c ++ สามารถสืบทอดจากคลาสมากกว่าหนึ่งสมาชิกไวยากรณ์ต่อไปนี้:

class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};

ขัดแย้งมรดกเข้าถึงปรับปรุงเป็นสาธารณะคุ้มครองหรือเอกชนหนึ่งที่ใช้ในการตกแต่งแต่ละชั้นฐานชั้นฐานระหว่างแต่ละคั่นด้วยเครื่องหมายจุลภาคดังที่แสดงไว้ข้างต้นตอนนี้ให้เราดูตัวอย่างต่อไปนี้:

#include <iostream>
 
using namespace std;

// 基类 Shape
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 基类 PaintCost
class PaintCost 
{
   public:
      int getCost(int area)
      {
         return area * 70;
      }
};

// 派生类
class Rectangle: public Shape, public PaintCost
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
   int area;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   area = Rect.getArea();
   
   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   // 输出总花费
   cout << "Total paint cost: $" << Rect.getCost(area) << endl;

   return 0;
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

Total area: 35
Total paint cost: $2450