โจทย์ชุดที่ 1
ศึกษาโปรแกรมต่อไปนี้แล้วตอบคำถามด้านล่าง เราขอให้คุณตอบคำถามโดยดูเฉพาะซอร์สโค้ดเท่านั้น กล่าวคือ โปรดอย่าคัดลอกมาเป็นไฟล์ คอมไพล์ และตอบคำถามเนื่องจากการเรียกใช้โค้ด ซึ่งจะนำความสนุกทั้งหมดออกไป
int main() { int counter, first, last, next; first = 1; last = 2; for (counter = first; counter <= last; counter++) { cout << "\n " << counter; next = counter * counter; cout << " " << next; } counter = first; while (counter <= last) { cout << "\n " << counter; next = counter * counter; cout << " " << next; counter++; } counter = first; do { cout << "\n " << counter; next = counter * counter; cout << " " << next; counter++; } while (counter < last); }
คำถามที่ 1: ผลที่ได้จากโปรแกรมนี้คืออะไร
ก) |
1 2 2 4 1 2 2 4 1 2 2 4 |
ข) |
1 1 2 4 1 1 2 4 1 1 2 4 |
ค) |
1 1 2 4 1 1 2 4 1 1 |
ง) |
1 1 2 4 1 1 1 1 2 4 |
จ) | ไม่ได้แสดงผลลัพธ์ใดๆ - มีข้อผิดพลาดทางไวยากรณ์ |
คำถามที่ 2: จะเกิดอะไรขึ้นหากเรานำการเริ่มต้น "ตัวนับ" ออก ก่อนที่จะทำวนซ้ำ
ก) | ลูปที่ไม่สิ้นสุด - ลูปที่ต้องทำขณะที่จะแสดงผลลัพธ์เป็น 1 |
ข) | เอาต์พุตของโปรแกรมจะไม่เปลี่ยนแปลง |
ค) | เอาต์พุตแบบวนซ้ำในขณะทำงานจะเป็น 2 และ 4 |
ง) | การวนซ้ำระหว่างดำเนินการจะไม่แสดงผลใดๆ |
จ) | เอาต์พุตแบบวนซ้ำที่ต้องทำขณะนั้นจะแสดงที่ 3 และ 9 |
คำถามที่ 3: สมมติว่าโปรแกรมเดิมอยู่ที่ด้านบนของหน้านี้ นำบรรทัดเริ่มต้นตัวแปรตัวนับออกก่อนทำการเล่นวนซ้ำ อะไร จะเกิดขึ้นหากเรานำบรรทัด counter++ ภายในลูป ขณะที่ลูปออกด้วย เช่น ต่อไปนี้คืออะไร
ก) | การวนซ้ำวิดีโอไม่แสดงผลใดๆ |
ข) | ขณะที่วนซ้ำเอาต์พุตเป็น 1 และ 1 การวนซ้ำในระหว่างดำเนินการไม่แสดงผลใดๆ |
ค) | เอาต์พุตของการเล่นวนซ้ำจะเหมือนกับเมื่อทั้ง 2 บรรทัด รวมไว้ด้วย |
ง) | ระบบจะแสดงตัวเลขแบบสุ่มจนกว่าเราจะเปลี่ยนคอมพิวเตอร์ ปิดอยู่ |
จ) | ลูปขณะกำลังวนซ้ำ |
คำถามที่ 4: จะเกิดอะไรขึ้น เมื่อพิจารณาจากโปรแกรมต้นฉบับที่ด้านบนของหน้านี้ ถ้าลูป ขณะที่มีลักษณะเช่นนี้
counter = first; while (counter <= last) { cout << "\n" << counter; if (first % 2 == 0) next = counter * counter; cout << " " << next; counter++; }
ก) | เอาต์พุตของการเล่นวนซ้ำเหมือนกับในโปรแกรมเดิม |
ข) | ลูปขณะกำลังไม่แสดงข้อมูลใดเลย |
ค) | เอาต์พุตของลูปขณะคือ 1 1 และ 1 4 |
ง) | เอาต์พุตของลูปขณะคือ 1 2 และ 2 4 |
จ) | เอาต์พุตของวนซ้ำคือ 1 4 และ 2 4 |
ฉ) | เอาต์พุตของ ขณะที่วนซ้ำคือ 2 4 และ 2 4 |
คำถามที่ 5: จะเกิดอะไรขึ้นหากตัวแปรแรกมากกว่าตัวแปรสุดท้าย
ก) | ขณะที่ลูปจะแสดงผลลัพธ์บางอย่าง แต่ไม่มีผลลัพธ์อื่นๆ ปรากฏขึ้น |
ข) | คำสั่ง ขณะที่วนซ้ำจะแสดงผลลัพธ์บางอย่าง และจะไม่แสดงผลอย่างอื่น |
ค) | จะไม่มีเอาต์พุตเลย |
ง) | โปรแกรมจะมองหาข้อผิดพลาดหรือข้อขัดข้อง |
จ) | for-loop จะแสดงผลลัพธ์บางอย่าง แต่จะไม่ส่งผลลัพธ์อื่น |
คำถามที่ 6: โปรแกรมจะแสดงอะไรหากเราเริ่มต้นตัวแปรแรก ให้เหมือนกับตัวแปรสุดท้าย
ก) | คำสั่ง ขณะที่วนซ้ำจะแสดงผลลัพธ์บางอย่าง และจะไม่แสดงผลอย่างอื่น |
ข) | ขณะที่ลูปจะแสดงผลลัพธ์บางอย่าง แต่ไม่มีผลลัพธ์อื่นๆ ปรากฏขึ้น |
ค) | การวนซ้ำแต่ละรอบจะแสดง 1 บรรทัด |
ง) | ขณะที่ Do ขณะที่ลูปจะแสดงเอาต์พุต 2 บรรทัด และอีกเส้นหนึ่งจะวนซ้ำ 1 บรรทัด |
จ) | จะไม่แสดงผลใดๆ |
ฉ) | for-loop จะแสดงผลลัพธ์บางอย่าง แต่จะไม่ส่งผลลัพธ์อื่น |
โจทย์ชุดที่ 2
ตามชุดปัญหาก่อนหน้านี้ นี่คือโปรแกรมให้คุณพิจารณา โปรดตอบคำถามที่ตามมาโดยดูเฉพาะซอร์สโค้ด
#include <iostream> using namespace std; int main() { int Boys = 3, Girls = 5; void F1(int males, int females); void F2(int &m, int &f); F1(Boys, Girls); cout << "\nAfter calling F1, within main()"; cout << "\n\tBoys = " << Boys; // #2 cout << "\n\tGirls = " << Girls; F2(Boys, Girls); cout << "\nAfter calling F2, within main()"; cout << "\n\tBoys = " << Boys; // #4 cout << "\n\tGirls = " << Girls; } void F1(int b, int g) { b += 3, g += 4; cout << "\nF1"; cout << "\n\tBoys = " << b; // #1 cout << "\n\tGirls = " << g; } void F2(int &b, int &g) { b = b + 8, g = g + 5; cout << "\nF2"; cout << "\n\tBoys = " << b; // #3 cout << "\n\tGirls = " << g; }
คำถามที่ 1: เอาต์พุตของตัวแปร Boys คืออะไรในบรรทัดที่มีการทำเครื่องหมาย
ก) |
#1: 6 #2: 3 #3: 11 #4: 11 |
ข) |
#1: 6 #2: 3 #3: 11 #4: 3 |
ค) |
#1: 6 #2: 6 #3: 11 #4: 11 |
ง) | และไม่แสดงผลใดๆ เนื่องจากไม่ได้คอมไพล์หรือเรียกใช้ |
คำถามที่ 2: เลือกทุกข้อที่เกี่ยวข้องกับบรรทัดต่อไปนี้ของโปรแกรม
void F1(int males, int females); void F2(int &m, int &f);
ก) | กฎ C++ ระบุว่าเราสามารถลบ 2 บรรทัดนี้ได้ตราบใดที่ วิธีการถูกกำหนดก่อนใช้งาน |
ข) | กฎ C++ ระบุว่าชื่ออาร์กิวเมนต์ต้องเหมือนกันระหว่าง การประกาศและคำจำกัดความ |
ค) | โปรแกรมนี้จะขัดข้องถ้าเราลบสองบรรทัดนี้ออก |
ง) | เป็นเรื่องปกติที่ประกาศจะประกาศต่อสาธารณะทั่วโลก |
จ) | ซึ่งเราเรียกว่าการประกาศแบบส่งต่อ |
คำถามที่ 3: หากเราย้ายบรรทัดต่อไปนี้จาก main() และวางไว้ในทั่วโลก จะเกิดอะไรขึ้น
int Boys = 3, Girls = 5;
ก) | ซึ่งเอาต์พุตจะเหมือนเดิม |
ข) | เด็กผู้ชายจะ = 3 และเด็กผู้หญิงจะ = 5 ในผลลัพธ์ทั้งหมด |
ค) | เด็กผู้ชายจะ = 3 และเด็กผู้หญิงจะ = 5 เฉพาะในเอาต์พุตจาก main() |
คำถามที่ 4: หากเราเปลี่ยนช่วงเริ่มต้นของโปรแกรมให้มีลักษณะดังนี้
// We have moved moved these to global scope const int Boys = 3; const int Girls = 5; void main() { //int Boys = 3, Girls = 5;
ก) | โปรแกรมจะรวบรวมแต่จะขัดข้องเมื่อเราลองเรียกใช้ |
ข) | เอาต์พุตจะไม่มีการเปลี่ยนแปลง |
ค) | ผลลัพธ์จะเป็นเด็กผู้ชาย = ผู้หญิง 3 คน = 5 คนตลอดระยะเวลาของโปรแกรม |
ง) | เอาต์พุตจะเป็น Boys = 3 Girls = 5 เฉพาะในเอาต์พุตจาก main() |
จ) | โปรแกรมอาจไม่ได้คอมไพล์ (ขึ้นอยู่กับคอมไพเลอร์) |
คำถามที่ 5: มีการส่งข้อมูลด้วยค่าใน F2
ก) | จริง |
ข) | เท็จ |
โจทย์ชุดที่ 3
ตามชุดปัญหาก่อนหน้านี้ นี่คือโปรแกรมให้คุณพิจารณา โปรด ตอบคำถามที่ตามมาโดยดูเฉพาะซอร์สโค้ดอันนี้ ที่น่าสนใจกว่าสองรูปแบบก่อนหน้านี้ - ติดตามโค้ดอย่างรอบคอบ
#include <iostream> using namespace std; const int MAX_SIZE = 20; typedef int ARR2D[MAX_SIZE][MAX_SIZE]; void Print(ARR2D in_array, int rows, int cols); void Fill(ARR2D in_array, int rows, int cols); int main() { ARR2D matrix; int row, col; do { cout << "Please enter the size of the matrix to generate (rows and cols) :" << endl; cin >> row >> col; } while (row <= 0 || row > MAX_SIZE || col <= 0 || col > MAX_SIZE); Fill(matrix, row, col); Print(matrix, row, col); return(0); } void Print(ARR2D in_array, int rows, int cols) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) cout << '\t' << in_array[i][j]; cout << endl; } } void Fill(ARR2D in_array, int rows, int cols) { for(int i = 0; i < rows; i++) for (int j = 0; j < cols; j++) in_array[i][j] = 0; const int limit = rows * cols; int cNum = 1; int cRow = 0; int cCol = 0; int cDir = 0; // 0-north, 1-east, 2-south, 3-west while(true) { // Place the number. in_array[cRow][cCol] = cNum; cNum++; if (cNum > limit) break; int fRow = cRow; int fCol = cCol; while (true) { fRow = cRow; fCol = cCol; switch(cDir) { case 0: fRow--; break; case 1: fCol++; break; case 2: fRow++; break; case 3: fCol--; break; } if ( fRow >= 0 && fRow < rows && fCol >= 0 && fCol < cols && in_array[fRow][fCol] == 0) break; cDir = (cDir + 1) % 4; } cRow = fRow; cCol = fCol; } }
คำถามที่ 1: โปรแกรมนี้แสดงผลลัพธ์ด้วยอินพุต 3 สำหรับแถวและ 4 สำหรับค่าใด ได้อย่างไร
ก) |
1 2 3 4 5 6 7 8 9 10 11 12 |
ข) |
1 2 3 4 5 6 7 8 9 10 11 12 |
ค) |
12 11 10 9 8 7 6 5 4 3 2 1 |
ง) |
1 3 2 4 8 6 7 5 9 11 10 12 |
จ) |
1 2 3 4 10 11 12 5 9 8 7 6 |
ช) |
9 8 7 6 10 11 12 5 1 2 3 4 |
ซ) | ไม่ได้แสดงผลลัพธ์ใดๆ - ตรรกะไม่ถูกต้อง |
1) | และไม่แสดงผลลัพธ์ใดๆ - มีข้อผิดพลาดทางไวยากรณ์ |
J) | ซึ่งไม่ได้แสดงผลลัพธ์ใดๆ แต่ไม่เป็นอย่างที่ควร |
พัน) | โดยจะแสดงผลตัวเลข 12 ตัวแรกที่นึกถึงในขณะที่คุณกำลังรอให้โปรแกรมทำงาน |
คำถามที่ 2: จะเกิดอะไรขึ้นหากเราเพิ่มบรรทัดต่อไปนี้ในฟังก์ชัน main() ของเรา
MAX_SIZE = 10;
ก) | ซึ่งไม่อนุญาตใน C++ |
ข) | เราอนุญาต โปรแกรมจะทำงานโดยมี MAX_SIZE ที่ตั้งค่าเป็น 20 |
ค) | เราอนุญาต โปรแกรมจะทำงานโดยมี MAX_SIZE ที่ตั้งค่าเป็น 10 |
คำถามที่ 3: พิจารณาข้อความ 4 บรรทัดต่อไปนี้จากโปรแกรมด้านบน
const int MAX_SIZE = 20; typedef int ARR2D [MAX_SIZE][MAX_SIZE]; void Print (ARR2D A, int rows, int cols); void Fill (ARR2D A, int rows, int cols);
1) สามารถใช้ Const ใน typedef ได้ไหม
2) เป็นไปได้หรือไม่ที่จะใช้ typedef ในการประกาศก่อนที่จะมีการประกาศตัวแปรประเภทดังกล่าว
ก) | 1) ใช่ 2) ใช่ |
ข) | 1) ไม่ควร 2) ไม่ |
ค) | 1) ไม่ใช่ 2) ใช่ |
ง) | 1) ใช่ 2) ไม่ใช่ |
คำถามที่ 4: เราจะใช้สิ่งต่อไปนี้ได้ไหม
#define MAX_SIZE 20
const int MAX_SIZE = 20;
ก) | ใช่ ได้ผล และคุณสามารถใช้ #define สำหรับค่าคงที่ใน C++ |
ข) | ใช้ได้ แต่เรามักไม่ใช้ #define สำหรับค่าคงที่ ใน C++ |
ค) | #define ไม่พร้อมใช้งานใน C++ |
ง) | คุณไม่สามารถทำสิ่งที่กล่าวมาข้างต้นใน C |
Question 5: typedef ใช้เพื่อสร้างชื่อแทนสำหรับชื่อประเภท
ก) | จริง |
ข) | เท็จ |
คำถามที่ 6: จะเกิดอะไรขึ้นถ้าเราไม่กำหนดค่าเริ่มต้นอาร์เรย์เป็น 0 ในฟิลด์ Fill()
ก) | โมเดลจะทํางานแต่เอาต์พุตจะเป็นแบบ 12 ทั้งหมด |
ข) | โค้ดจะสามารถทำงานได้อย่างถูกต้อง และสร้างเอาต์พุตเดียวกันกับในกรณีที่อาร์เรย์ เริ่มต้นเป็น 0 |
ค) | โปรแกรมจะไม่ทำงานหรือขัดข้อง |
ง) | จะเรียกใช้ แต่เอาต์พุตจะเป็น 0 ทั้งหมด |
จ) | จะทำงานแต่อาจไม่สร้างเอาต์พุตใดๆ |
คำถามที่ 7: เลือกได้หลายคำตอบ ทำไมเราถึงใช้ Const สำหรับ MAX_SIZE ในโปรแกรมนี้ การพิมพ์ "20" จะง่ายกว่าใช่ไหม แทนที่จะเป็น MAX_SIZE ไม่ว่าที่ใด หากจำเป็น
ก) | MAX_SIZE คือค่า C++ ในตัวที่ทุกคนสามารถใช้ได้ เพิ่งตั้งค่า และใช้งานได้เลย |
ข) | ควรหลีกเลี่ยงข้อเสียร่วมเช่นเดียวกับตัวแปรร่วม |
ค) | การใช้ Const ทำให้โปรแกรมของเราเข้าใจได้ง่ายขึ้น |
ง) | ตัวเลขเวทมนตร์ในโปรแกรมถือเป็นแนวทางปฏิบัติที่ดี |
จ) | หากเราต้องการเปลี่ยนแปลง MAX_SIZE เราจำเป็นต้องเปลี่ยนแปลงเพียงครั้งเดียว สถานที่ |
คำถามที่ 8: คำสั่ง Switch ในฟังก์ชัน Fill() ควรมีค่าเริ่มต้น เพราะถือว่าเป็นรูปแบบที่เหมาะสมในการใส่รูปแบบ
ก) | จริง |
ข) | เท็จ |
คำถามที่ 9: ประกาศในฟังก์ชันFill() เราจะประกาศตัวแปรระหว่างคำสั่ง ตัวอย่างเช่น cNum และ cRow จะได้รับการประกาศและเริ่มต้นหลังจากที่ for-loop ทำงาน คำสั่งนี้จะทำงานใน C++ ได้ไหม หรือต้องประกาศตัวแปรทั้งหมดไว้ที่ด้านบนสุดของ ฟังก์ชันได้อย่างไร
ก) | สามารถทำได้ |
ข) | โดยต้องประกาศตัวแปรทั้งหมดที่ด้านบนของฟังก์ชัน |
ค) | ทั้งสองวิธีนี้ไม่ถูกต้อง - C++ ไม่อนุญาตให้ใช้ตัวแปรที่ตำแหน่งใดๆ ใน ของโปรแกรม |
ง) | ต้องประกาศตัวแปรทั้งหมดในขอบเขตส่วนกลาง |
โจทย์ชุดที่ 4
ต่อไปนี้เป็นชุดของไฟล์ที่กำหนดและทดสอบคลาสง่ายๆ เช่นเคย ตอบคำถามที่ตามมาโดยอ้างอิงซอร์สโค้ดเท่านั้น
ต่อไปนี้คือไฟล์ส่วนหัว (cow.h)
#ifndef COW_H #define COW_H using namespace std; typedef enum Color {black, brown, beige, blackandwhite, nocolor}; class Cow { public: Cow(); ~Cow(); // accessors double weight() { return weight_; }; string name() { return name_; }; Color color() { return color_; }; // mutators void set_name(string inName) { name_ = inName; }; void set_color(Color inColor) { color_ = inColor; }; void set_weight(double inWeight) {weight_ = inWeight; }; void Moo(); void Properties(); private: Color color_; double weight_; string name_; }; #endif
ไฟล์ .cc ที่เกี่ยวข้อง (cow.cc) มีดังนี้
#include <iostream> #include "cow.h" using namespace std; Cow::Cow() {} Cow::~Cow() {} void Cow::Moo() { cout << name() << " says MOO." << endl; } void Cow::Properties() { cout << name() << " weighs " << weight() << ", is " << color() << " and says MOO." << endl; }
และนี่คือโปรแกรมลูกค้าสำหรับชั้นเรียนนี้ (cowmain.cc):
#include <iostream> #include "cow.h" using namespace std; int main() { Cow cow1; cow1.set_name("betsy"); cow1.set_weight(400.0); cow1.set_color(black); cow1.Moo(); cow1.Properties(); }
คำถามที่ 1: โปรแกรมนี้แสดงผลอะไรบ้าง
ก) | Betsy พูดว่า MOO Betsy หนัก 400 มีค่า 0 และพูดว่า MOO |
ข) | Betsy พูดว่า MOO Betsy หนัก 400 ตัวดำและพูดว่า MOO |
ค) | Betsy พูดว่า MOO betsy หนัก 400 |
คำถามที่ 2: เราไม่ควรวางโค้ดสำหรับตัวเข้าถึงและเมธอด Mutator ในไฟล์ส่วนหัว (โปรดทราบว่าตัวเข้าถึงคือเมธอดที่แสดงผลค่า และ Mutator เป็นเมธอดที่มีการแก้ไขค่า)
ก) | จริง |
ข) | เท็จ |
คำถามที่ 3: เราต้องใช้ "วัว::" ไหม ก่อนคำนิยามของฟังก์ชันแต่ละรายการ ใน cow.cc ไหม
ก) | ไม่ใช่ - เนื่องจากมี cow.h ด้วย |
ข) | ใช่ |
คำถามที่ 4: บทบาทหน้าที่:
#ifndef COW_H #define COW_H ... #endif
เล่นในไฟล์ส่วนหัวได้ไหม
เลือกได้หลายคำตอบ
ก) | ไม่มีจุดประสงค์ใดๆ เพราะชื่อไฟล์คือ "วัว" ไม่ใช่ COW_H |
ข) | หากเราไม่ได้ดำเนินการดังกล่าว เราจะได้รับข้อผิดพลาดรันไทม์ |
ค) | หากเราไม่ได้ดำเนินการดังกล่าว เราอาจรวมไฟล์มากกว่า 1 ครั้ง |
ง) | พวกเขาไม่ดำเนินการใดๆ เพราะคีย์เวิร์ดอย่างน้อย 1 คำสะกดผิด |
จ) | จึงไม่ทำอะไรเนื่องจากคลาส Cow มีไฟล์ส่วนหัวเพียงไฟล์เดียว |
คำถามที่ 5: จะเกิดอะไรขึ้นหากเราเพิ่มบรรทัดต่อไปนี้ใน cowmain.cc
cow1.weight_ = 24;
ก) | โปรแกรมจะทำงาน และปรับตัวแปรน้ำหนัก ที่บรรทัดนี้ |
ข) | โปรแกรมจะรวบรวมและเรียกใช้ แต่เกิดข้อขัดข้องในบรรทัดนั้น |
ค) | C++ ไม่อนุญาต |
ง) | โปรแกรมจะรวบรวมและเรียกใช้ แต่ตัวแปรน้ำหนักไม่ ที่เปลี่ยนแปลงในบรรทัดนี้ |
คำถามที่ 6: เมื่อมีการดำเนินการกับบรรทัดต่อไปนี้ เครื่องมือสร้างในคลาส Cow จะถูกเรียก:
Cow cow1;
ลักษณะเฉพาะที่สำคัญของผู้สร้างมีอะไรบ้าง
เลือกได้หลายคำตอบ
ก) | ซึ่งมักจะไม่แสดงค่าใดๆ |
ข) | ถ้าเราไม่ให้นักเรียนสร้างกับชั้นเรียน ชั้นเรียนจะ ไม่คอมไพล์ |
ค) | เครื่องมือสร้างในคลาส Cow นั้นผิดปกติเนื่องจากไม่มีการเริ่มต้น ตัวแปรส่วนตัว |
ง) | โดยจะมีชื่อเดียวกับชั้นเรียนเสมอ |
จ) | เราสามารถมีตัวสร้างได้หลายตัวในชั้นเรียน ตราบใดที่อาร์กิวเมนต์ แตกต่าง |
ฉ) | มีการเรียกใช้เครื่องมือสร้างเมื่อชั้นเรียนเริ่มต้นทันที |
คำถามที่ 7: คุณลักษณะที่สำคัญของผู้ทำลายมีอะไรบ้าง
ก) | ระบบจะเรียกตัวทำลายเมื่อวัตถุอยู่นอกขอบเขต |
ข) | ตัวทำลายมีชื่อเหมือนกับคลาส แต่นำหน้าด้วย "~" |
ค) | ในตัวทำลายอะไรบางอย่างใน cow.cc ด้วย ไม่ทำอะไรเลย |
ง) | ถ้าเราไม่สร้างผู้ทำลายชั้นเรียน ชั้นเรียนจะไม่ คอมไพล์ |
คำถามที่ 8: จากวิธีที่โปรแกรมของลูกค้าใช้ชั้นเรียน ให้พิจารณา ดังต่อไปนี้:
การแบ่งสมาชิกออกเป็นแบบสาธารณะและส่วนตัวในชั้นเรียนวัวนั้นไม่เหมาะสม นั่นคือ บางสิ่งที่เป็นส่วนตัวควรเป็นแบบสาธารณะ หรือสาธารณะควรเป็นแบบส่วนตัว
ก) | จริง |
ข) | เท็จ |
คำถามที่ 9: จะเกิดอะไรขึ้นหากเราเพิ่มตัวสร้างอื่นนอกเหนือไปจาก เราต้องว้าว.cc ตัวสร้างใหม่มีหน้าตาแบบนี้
Cow::Cow(string inName, double inWeight, Color inColor) { set_name(inName); set_weight(inWeight); set_color(inColor); }
และเราเพิ่มบรรทัดต่อไปนี้ไปยัง main():
Cow cow2("milly", 350.2, brown); cow2.Moo(); cow2.Properties();
เราสามารถดำเนินการได้หรือไม่
เลือกได้หลายคำตอบ
ก) | บรรทัดใน main() ที่เราเริ่มต้น cow2 จะขัดข้อง |
ข) | เรามีตัวสร้างได้เพียงรายการเดียว |
ค) | กรณีนี้พบได้บ่อยใน C++ |
ง) | ใช่ แต่นี่ไม่ใช่การใช้งาน C++ ตามปกติ |
จ) | คำสั่งนี้จะทำงานได้ แต่จะไม่แสดงข้อมูลใดๆ เพราะ จะไม่มีการเริ่มต้น "ส่วนตัว" |
ฉ) | เราไม่สามารถเรียก setName(), setColor() และ setweight() จากภายใน วิธีการของชั้นเรียนเดียวกัน |
คำถามพิเศษ
คำถามที่ 1) ผลที่ตามมาคืออะไร
#include <iostream> using namespace std; void HelpMe(int *p, int *num, int *q); void WhereAmI(int *p, int *q, int a); void HelpMe(int *p, int *num, int *q) { int a; a = 2; q = &a; *p = *q + *num; num = p; } void WhereAmI(int *p, int *q, int a) { a = 6; *p = a + *p; *q = a + 3; HelpMe(q, &a, p); } int main() { int *p; int q; int *num; int a; a = 3; q = 5; p = &a; num = &q; HelpMe(&a, p, num); WhereAmI(&q, p, *num); cout << "*p = " << *p << " q = " << q << " *num = " << *num << endl; }
คำถามที่ 2) พิจารณาข้อความต่อไปนี้ โดยสมมติว่ามีคลาส Apple อยู่แล้วและมีการเริ่มต้นใช้งานแล้ว คลาส Apple มีตัวแปร color_instance ดังต่อไปนี้
Apple* granny_smith = new Apple;
เลือกทุกข้อความด้านล่างที่เป็นจริง
ก) | Apple* granny_smith = NULL; if (granny_smith == NULL)... ค่านี้ไม่ใช่ - NULL ไม่ใช่ค่าที่สามารถตรวจสอบได้ในลักษณะนี้ |
ข) | Apple* granny_smith, fuji; การดำเนินการนี้จะประกาศเคอร์เซอร์ 2 ตัวไปยังออบเจ็กต์ Apple |
ค) | ตัวแปร granny_smith มีค่าตัวแปรอินสแตนซ์ที่เชื่อมโยงกับออบเจ็กต์ Apple |
ง) | Apple* granny_smith = NULL; ไม่เป็นไร |
จ) | ตัวแปร granny_smith มีที่อยู่สำหรับออบเจ็กต์ Apple |
ฉ) | string gs_color = *(granny_smith.get_color()); คำสั่งนี้จะแสดงสีของออบเจ็กต์ granny_smith โดยถือว่าได้มีการเริ่มต้นไว้แล้ว |
ช) | พื้นที่เก็บข้อมูลสำหรับออบเจ็กต์ Apple ใหม่มีการจัดสรรในฮีป |
ซ) | พื้นที่เก็บข้อมูลสำหรับออบเจ็กต์ Apple ใหม่มีการจัดสรรบนสแต็กรันไทม์ |
1) | int* a = &b; วิธีนี้จะใส่ที่อยู่ของ b ลงใน a |
คำถามที่ 3) ผลที่ได้จากโปรแกรมต่อไปนี้คืออะไร
#include <iostream> using namespace std; const int kNumVeggies = 4; void Grill(int squash, int *mushroom); int Saute(int onions[], int celery); void Grill(int squash, int *mushroom) { *mushroom = squash/4; cout << *mushroom + squash << endl; } int Saute(int onions[], int celery) { celery *= 2; onions[celery]++; Grill(onions[0], &onions[3]); cout << celery << " " << onions[3] << endl; return celery; } int main() { int broccoli, peppers[kNumVeggies], *zucchini; for (broccoli = 0; broccoli < kNumVeggies; broccoli++) peppers[broccoli] = kNumVeggies - broccoli; zucchini = &peppers[Saute(peppers,1)]; Grill(*zucchini, zucchini); zucchini--; cout << peppers[3] + *zucchini + *(zucchini + 1) << endl; }
คำตอบแบบทดสอบ
คุณควรพยายามตอบคำถามด้านบนทั้งหมดโดยไม่ดูคำตอบ คุณควรขอความช่วยเหลือจากใครสักคนแทนที่จะเดินตรงไปยังใบคำตอบเพื่อขอความช่วยเหลือ
คุณสามารถดูคำตอบของปัญหาข้างต้นได้ที่นี่