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 ++ polymorphism

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

เมื่อ c ++ ฟังก์ชันสมาชิกเรียกเฉลี่ย polymorphic จะให้ทำหน้าที่ที่แตกต่างกันขึ้นอยู่กับชนิดของวัตถุที่ฟังก์ชั่นที่เรียกว่า

ตัวอย่างต่อไปนี้รูปร่างชั้นฐานที่ได้มาสำหรับสองประเภทดังต่อไปนี้:

#include <iostream> 
using namespace std;
 
class Shape {
   protected:
      int width, height;
   public:
      Shape( int a=0, int b=0)
      {
         width = a;
         height = b;
      }
      int area()
      {
         cout << "Parent class area :" <<endl;
         return 0;
      }
};
class Rectangle: public Shape{
   public:
      Rectangle( int a=0, int b=0):Shape(a, b) { }
      int area ()
      { 
         cout << "Rectangle class area :" <<endl;
         return (width * height); 
      }
};
class Triangle: public Shape{
   public:
      Triangle( int a=0, int b=0):Shape(a, b) { }
      int area ()
      { 
         cout << "Triangle class area :" <<endl;
         return (width * height / 2); 
      }
};
// 程序的主函数
int main( )
{
   Shape *shape;
   Rectangle rec(10,7);
   Triangle  tri(10,5);

   // 存储矩形的地址
   shape = &rec;
   // 调用矩形的求面积函数 area
   shape->area();

   // 存储三角形的地址
   shape = &tri;
   // 调用三角形的求面积函数 area
   shape->area();
   
   return 0;
}

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

Parent class area
Parent class area

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

แต่ตอนนี้ให้โปรแกรมแก้ไขเล็กน้อยในชั้นเรียนรูปร่าง, พื้นที่แรก ()วางคำสั่งเสมือนคำหลักดังต่อไปนี้:

class Shape {
   protected:
      int width, height;
   public:
      Shape( int a=0, int b=0)
      {
         width = a;
         height = b;
      }
      virtual int area()
      {
         cout << "Parent class area :" <<endl;
         return 0;
      }
};

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

Rectangle class area
Triangle class area

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

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

ฟังก์ชั่นเสมือนจริง

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

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

ฟังก์ชั่นเสมือนบริสุทธิ์

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

เราสามารถฐานพื้นที่ทำงานเสมือนระดับ () เพื่ออ่านดังนี้:

class Shape {
   protected:
      int width, height;
   public:
      Shape( int a=0, int b=0)
      {
         width = a;
         height = b;
      }
      // pure virtual function
      virtual int area() = 0;
};

= 0บอกคอมไพเลอร์ที่ฟังก์ชั่นที่มีร่างกายไม่เหนือทำงานเสมือนเป็นหน้าที่เสมือนบริสุทธิ์