เนื่องจากคลาสที่ได้รับมีคลาสพื้นฐาน เมื่อเราสร้างคลาสที่ได้รับ ระบบจะสร้างคลาสพื้นฐานขึ้นมาก่อน ควรสังเกตว่าคลาสที่ได้รับจะดูดซับสมาชิกทั้งหมดของคลาสพื้นฐาน แต่ไม่รวมตัวสร้างและตัวทำลายที่กล่าวถึงในภายหลัง ซึ่งหมายความว่าเมื่อสร้างคลาสที่ได้รับ มันจะเรียกคลาสพื้นฐานก่อนจะเรียกตัวสร้างของตัวเอง . ตัวสร้าง
ที่นี่เราสามารถตรวจสอบสิ่งนี้ผ่านรหัส:
#include<iostream>usingnamespacestd;classClock{private:intH;intM;intS;public:Clock(){cout<<Clock'sConstructorCalled!<<endl;}};classAlarmClock:publicClock{private:intAH;intAM;public:AlarmClock () {cout << AlarmClock'sConstructorCalled! << endl;}}; intmain () {AlarmClockA; return0;}
ภาพหน้าจอที่รันอยู่มีดังนี้:
เราจะเห็นว่ามีการกำหนดอ็อบเจ็กต์คลาสที่ได้รับเพียงอันเดียว และคอนสตรัคเตอร์ของคลาสที่ได้รับและคลาสฐานจะถูกเรียกโดยอัตโนมัติ ลำดับการเรียกคือการเรียก คอนสตรัคเตอร์ของคลาสฐาน ก่อน จากนั้นจึง เรียกคอนสตรัคเตอร์ของคลาสที่ได้รับ
สิ่งที่คุณได้เห็นข้างต้นเป็นวิธีการโทรที่ใช้กันทั่วไปและง่ายที่สุด นี่เป็นเพียงโดยปริยายเท่านั้น กล่าวคือ มันถูกเรียกโดยอัตโนมัติโดยไม่ต้องเขียนออกมา แล้วจะเรียกมันได้อย่างไรเมื่อ Constructor ของคลาสฐานรับพารามิเตอร์? ไม่เป็นไรใช่ไหม? จะส่งพารามิเตอร์ได้อย่างไร?
คำตอบ: จากนั้นเราจะต้องบอกคอมไพลเลอร์อย่างชัดเจน นั่นคือ เขียนมันออกมาให้ชัดเจน และระบุพารามิเตอร์ที่จะส่งผ่าน
รูปแบบการเขียนทั่วไปคือ:
ชื่อตัวสร้างคลาสที่ได้รับ (คอลัมน์รายการพารามิเตอร์ทั้งหมด): ตัวสร้างคลาสฐาน (คอลัมน์รายการพารามิเตอร์จริง)
ตัวอย่างโค้ด:
#include<iostream>usingnamespacestd;classClock{private:intH;intM;intS;public:Clock(){cout <<Clock'sConstructorCalled!<<endl;}Clock(inth,intm,ints){this->H=h ;this->M=m;this->S=s;cout<<Clock'sConstructorwithparameterCalled!<<endl;}};classAlarmClock:publicClock{private:intAH;intAM;public:AlarmClock(){cout<<AlarmClock' sConstructorCalled! << endl;} AlarmClock (inth, intm, ints): นาฬิกา (h, m, s) {cout << AlarmClock'sConstructorwithparameterCalled! << endl;}}; intmain () {AlarmClockA (8,10,30 );นาฬิกาปลุกB;return0;}
โปรดให้ความสนใจกับตัวสร้างของคลาสที่ได้รับ ต่อมาโคลอนและพารามิเตอร์ของคลาสฐานจะถูกส่งผ่าน และพารามิเตอร์ในคลาสฐานเป็นพารามิเตอร์จริงเพื่อให้ทราบถึงการเรียกพารามิเตอร์ที่ชัดเจน กรุณาฝึกฝนบนคอมพิวเตอร์ของคุณ!
ควรสังเกตว่าเมื่อมีตัวสร้างที่มีพารามิเตอร์ในคลาสฐาน จะต้องมีตัวสร้างคลาสที่ได้รับซึ่งมี การส่งผ่านพารามิเตอร์ที่ชัดเจน ในคลาสที่ได้รับเพื่อให้ทราบถึงการถ่ายโอนพารามิเตอร์ในคลาสฐานและดำเนินการเริ่มต้นให้เสร็จสิ้น