ซอร์สโค้ด หรือ โค้ด

      ลักษณะของคำสั่งที่ใช้จะมีทั้งฟังก์ชัน (function) หรือคำสำคัญ (keyword) ที่เป็นองค์ประกอบพื้นฐานของภาษา C++ ในขณะที่ฟังก์ชั่นถูกสร้างขึ้นมาเพื่อง่ายในการเรียกใช้งานจากหลายๆ ส่วนของโปรแกรม โดยทุกๆ โปรแกรมที่เขียนขึ้นด้วย C++ จะต้องมีฟังก์ชัน main เสมอ ซึ่งจะเป็นฟังก์ชันแรกที่ถูกเรียกใช้เมื่อโปรแกรมเริ่มทำงาน และจากภายในฟังก์ชัน main นี้เรายังสามารถเรียกใช้ฟังก์ชันหรือคำสั่งอื่นๆ ได้ต่อไปเรื่อยๆ

"> ซอร์สโค้ด หรือ โค้ด

      ลักษณะของคำสั่งที่ใช้จะมีทั้งฟังก์ชัน (function) หรือคำสำคัญ (keyword) ที่เป็นองค์ประกอบพื้นฐานของภาษา C++ ในขณะที่ฟังก์ชั่นถูกสร้างขึ้นมาเพื่อง่ายในการเรียกใช้งานจากหลายๆ ส่วนของโปรแกรม โดยทุกๆ โปรแกรมที่เขียนขึ้นด้วย C++ จะต้องมีฟังก์ชัน main เสมอ ซึ่งจะเป็นฟังก์ชันแรกที่ถูกเรียกใช้เมื่อโปรแกรมเริ่มทำงาน และจากภายในฟังก์ชัน main นี้เรายังสามารถเรียกใช้ฟังก์ชันหรือคำสั่งอื่นๆ ได้ต่อไปเรื่อยๆ

">

บทที่ 1. เริ่มต้นกับ C++

attapong 1746 17 พ.ย 2557 ไม่มีคำสำคัญในการค้นหา
ccpp

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

      ลักษณะของคำสั่งที่ใช้จะมีทั้งฟังก์ชัน (function) หรือคำสำคัญ (keyword) ที่เป็นองค์ประกอบพื้นฐานของภาษา C++ ในขณะที่ฟังก์ชั่นถูกสร้างขึ้นมาเพื่อง่ายในการเรียกใช้งานจากหลายๆ ส่วนของโปรแกรม โดยทุกๆ โปรแกรมที่เขียนขึ้นด้วย C++ จะต้องมีฟังก์ชัน main เสมอ ซึ่งจะเป็นฟังก์ชันแรกที่ถูกเรียกใช้เมื่อโปรแกรมเริ่มทำงาน และจากภายในฟังก์ชัน main นี้เรายังสามารถเรียกใช้ฟังก์ชันหรือคำสั่งอื่นๆ ได้ต่อไปเรื่อยๆ


      องค์ประกอบของโครงสร้างในการเขียนโปรแกรมด้วย C++ มีองค์ประกอบสำคัญด้วยกันสามส่วนดังต่อไปนี้

1. ส่วนเรียกใช้โมดูลอื่น

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

#include <iostream>

using namespace std;

      ตัวอย่างด้านบนที่ยกมานั้นเป็นการเรียกใช้โมดูลที่ชื่อ iostream ซึ่งเป็นโมดูลที่เพิ่มขึ้นมาในซีพลัสพลัส โดยมีการเรียกใช้ namespace std ซึ่งจะขอกล่าวถึงในภายหลังเมื่อกล่าวถึงเนื้อหาในส่วนของคลาสเรียบร้อยแล้ว จากบรรทัดแรกของโปรแกรมจะพบคำว่า #include ซึ่งเรียกว่า "preprocessor directive" หรือตัวดำเนินการล่วงหน้าหมายความว่าคอมไพเลอร์จะทำงานตามลักษณะของ preprocessor ที่กำหนดไว้ก่อนที่จะทำการคอมไพล์โค้ดที่เขียนขึ้น ในกรณีของ #include จะหมายถึงการนำเอาชุดคำสั่งทั้งหมดของโมดูลที่กำหนดไว้ด้านหลังมาผนวกเข้ากับซอร์สโค้ดก่อนจะทำการคอมไพล์ ซึ่งในตัวอย่างด้านบนเป็นการเอาคำสั่งจากไลบรารี iostream มาใช้งานทำให้โปรแกรมเมอร์สามารถใช้งานคำสั่ง cout ได้นั่นเอง ทั้งนี้ไลบรารีที่มีอยู่ในซีพลัสพลัสมีเป็นจำนวนมากและภายในจะประกอบไปด้วยคำสั่งหลายๆ คำสั่ง แต่ในไลบราลีเดียวกันกลุ่มของคำสั่งเหล่านั้นจะทำงานในลักษณะเดียวกัน

สังเกตว่า header file ที่นิยามใน C++ จะไม่กำหนดลงท้ายด้วย .h อีกต่อไป และเนื่องจากระบบการนิยามชื่อตัวระบุใน C++ จะมีการรวมกลุ่มการนิยามไว้ภายใต้เนมสเปซ (namespace) เพื่อความสะดวกจะได้ไม่ต้องกำกับชื่อเนมสเปซไว้ทุกครั้ง ดังนั้นในที่นี้เราจึงต้องมีการเรียกใช้ using namespace ด้วย (ซึ่งชื่อตัวระบุที่เราใช้ในตัวอย่างนี้นิยามอยู่ในเนมสเปซ std)

 

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

Stream หรือสตรีม เป็นคำเชิงนามธรรมของโครงสร้างประเภทหนึ่งที่ใช้ในการส่งและรับข้อมูลโดยมีทิศทางการไหลของข้อมูลที่แน่นอนในการรับส่งข้อมูล แต่ไม่สามารถทราบถึงขนาดของข้อมูลที่ใช้ทั้งการรับข้อมูลเพื่อนำมาใช้งานต่อหรือส่งออกไปผ่านทางโครงสร้างเชิงนามธรรมนี้ จึงเปรียบเสมือนกับหยดน้ำแต่ละหยดที่รวมตัวกันเป็นกระแสน้ำที่ไหลไปตามทิศทางเดียวกันจนก่อตัวเป็นกระแสบนสายธารข้อมูลดังกล่าว ซึ่งหลักการของสตรีมจะตรงข้ามกับการส่งข้อมูลผ่านทางอาร์เรย์ (array) ที่จำเป็นต้องมีขนาดที่แน่นอนในการใช้งาน

2. ส่วนข้อความสั่ง (statement)

      ประกอบไปด้วยส่วนการนิยามโปรแกรมย่อยหรือฟังก์ชัน (function) โดยจะต้องมีฟังก์ชันที่ชื่อว่า main() เป็นทางเข้าออกหลักของโปรแกรมทั้งตัว ดังตัวอย่างด้านล่างเป็นการเขียนโปรแกรมอย่างง่ายสุดโดยทำการแสดงคำว่า "My first C++ Program!" บนจอแสดงผล

#include <iostream>

using namespace std;

void main()
{
   cout << "My first C++ Program!";
}

      บรรทัดที่สำคัญได้แก่ void main(void) ที่บรรทัดนี้จะเป็นการบอกกับคอมไพเลอร์ให้รู้ว่ามีฟังก์ชันที่ชื่อ main อยู่และฟังก์ชันนี้จะไม่มีการคืนค่าใดๆ จากคำสำคัญ void ส่วนเครื่องหมายปีกกาครอบ "{" และ "}" จะเป็นตัวที่บอกถึงขอบเขตเริ่มต้นและจุดสิ้นสุดของฟังก์ชั่น main() ตามลำดับ ภายในฟังก์ชัน main() จะพบกับคำสั่ง cout << "My first C++ Program!"; หากเคยเขียนภาษาซีมาก่อนคำสั่งนี้จะเป็นเช่นเดียวกับคำสั่ง printf() ในภาษาซี จากที่กล่าวไว้แล้วว่า iostream เป็นไลบรารีที่เกี่ยวข้องกับสตรีมซึ่งย่อมต้องมี ต้นทางหรือปลายทางรวมไปถึงทิศทางการไหลของข้อมูลที่แน่นอน ซึ่งในที่นี้ ปลายทางได้แก่ cout ซึ่งหมายถึงอุปกรณ์เอาท์พุตได้แก่จอมอนิเตอร์ ส่วน << หมายถึงทิศทางการไหลของข้อมูลโดยส่วนแหลมจะชี้ไปยังปลายทาง และในที่นี้ตัวข้อมูลได้แก่  "My first C++ Program!" จึงหมายความว่าประโยคดังกล่าวจะไหลไปตามทิศของสัญลักษณะการไหลข้อมูลไปยังคำสั่ง cout ซึ่งหมายถึงจอมอนิเตอร์นั่นเอง

3. ส่วนนิยาม/ประกาศตัวระบุ (identifiers)

      ใช้สำหรับกำหนดชื่อแทนค่าคงตัวและมาโคร รวมทั้งตัวแปรกลางที่ใช้ในโปรแกรม โดยทั่วไปแล้วในการสร้างการตอบสนองกับผู้ใช้และบันทึกข้อมูลโดยอาศัยตัวแปร จากตัวอย่างในข้อที่ผ่านมาเป็นการส่งค่าออกไปยังจอมอนิเตอร์ด้วยสตรีมด้วยคำสั่ง cout สำหรับตัวอย่างต่อไปนี้จะเป็นการรับข้อมูลจากผู้ใช้ด้วยสตรีมด้วยคำสั่ง cin แต่ก่อนที่จะทำการรับข้อมูลจากผู้ใช้ จำเป็นต้องอาศัยตัวเก็บข้อมูลที่ผู้ใช้ป้อนเข้ามาซึ่งในตัวอย่างนี้จะใช้ตัวแปรในการเก็บข้อมูล ทั้งนี้ตัวแปรในซีพลัสพลัสนั้นมีด้วยกันหลายประเภทเพื่อเก็บข้อมูลที่มีลักษณะที่แตกต่างกันเช่น ตัวเลขและตัวอัษรเป็นต้น เมื่อทำการประกาศตัวแปรภายในซอร์สโค้ด เราจำเป็นต้องระบุถึงประเภทของตัวแปร แล้วตามด้วยชื่อของตัวแปรที่ต้องการใช้ในการเก็บข้อมูล ซึ่งประเภทของตัวแปรพื้นฐานที่พบได้บ่อยๆ ได้แก่ char, int, float

char

      ประเภทข้อมูลชนิดนี้ใช้เก็บตัวอักษรได้เพียงหนึ่งตัว ในการเก็บข้อมูลภายในจะเก็บเป็นรหัสตัวอักษร ซึ่งมีลักษณะเป็นตัวเลข โดยมีค่าอยู่ในช่วง -128 ถึง 127 ซึ่งมีช่วงของค่าที่เป็นไปได้ 256 ค่าหรือ หนึ่งไบต์ นั่นเอง สาเหตุที่ต้องเก็บข้อมูลตัวอักษรเป็นตัวเลขเนื่องจากการทำงานภายในของคอมพิวเตอร์มีลักษณะการทำงานเป็นเลขฐานสอง ดังนั้นการเก็บข้อมูลเป็นตัวเลขแล้วค่อยตีความค่าของรหัสตัวอักษรว่าตรงกับอักษรใดเพื่อนำมาแสดงผลออกบนจอแสดงผลจะรวดเร็วกว่าในการทำงาน

int

      ใช้ในการเก็บข้อมูลที่เป็นเลขจำนวนเต็มซึ่งสามารถเก็บค่าได้ทั้งฝั่งบวกและลบเช่นเดียวกันกับข้อมูลประเภท char เพียงแต่มีช่วงข้อมูลที่กว้างกว่ามาก โดยมีขนาดในการเก็บข้อมูลต่อตัวแปรหนึ่งตัวจะขึ้นอยู่กับคอมไพเลอร์ที่ใช้และระบบปฏิบัติการ หากอยู่ในระบบปฏิบัติการ 16 บิตเช่นระบบปฏิบัติการ Dos จะมีขนาดเท่ากับสองไบต์ และมีขนาดเท่ากับสี่ไบต์ในระบบปฏิบัติการ 32 และ 64 บิต ของ Microsoft Windows โดยอ้างอิงจาก Visual Studio เป็นหลัก

float

      ใช้ในการเก็บข้อมูลที่มีลักษณะเป็นตัวเลขทศนิยมมีค่าได้ทั้งฝั่งบวกและลบ โดยมีขนาดในการเก็บข้อมูลต่อหนึ่งตัวแปรเท่ากับสี่ไบต์

double

      ใช้ในการเก็บข้อมูลตัวเลขแบบทศนิยมเช่นเดียวกับ float เพียงแต่มีช่วงข้อมูลที่เป็นไปได้มากกว่า โดยมีขนาดในการเก็บข้อมูลต่อหนึ่งตัวแปรเท่ากับแปดไบต์

การประกาศตัวแปรใน C++

      การประกาศตัวแปรจะอยู่ในรูปแบบต่อไปนี้ "ประเภทตัวแปร ชื่อตัวแปร;" ตัวอย่าง เช่น

int x;
char letter;
float the_float;

      ในกรณีที่ต้องการประกาศตัวแปรที่เป็นประเภทเดียวกันหลายๆ ตัวสามารถคั่นระหว่างชื่อตัวแปรเหล่านั้นด้วยสัญลักษณ์ "," ตัวอย่าง เช่น

int a, b, c, d;

      หากสังเกตให้ดีจะเห็นได้ว่าในการประกาศตัวแปรแต่ละครั้งจะจบลงด้วยเครื่องหมาย ";" เสมอ เช่นเดียวกับการเรียกใช้ฟังก์ชันในตัวอย่างแรกด้วยคำสั่ง cout <<

การใช้งานตัวแปร

      ตัวอย่างการใช้งานตัวแปร

#include <iostream>

using namespace std;

int main()
{
int myvalue;
cout << "Please enter a number: ";
cin >> myvalue;
cout << "You entered: "<< myvalue<<"n";
}

      หัวใจสำคัญของตัวอย่างนี้ได้แก่ตัวแปร myvalue ซึ่งประกาศเป็นตัวแปรประเภท int สำหรับคำสั่ง cin >> เช่นเดียวกับตัวอย่างแรกคำสั่ง cin เป็นการจัดการกับข้อมูลสตรีมโดยทำการรับค่าจากคีย์บอร์ดและส่งค่าไปยังปลายทางของ ">>" ดังที่แสดงไว้ในคำสั่ง cin >> myvalue ซึ่งหมายความว่าค่าตัวเลขจากคีย์บอร์ดที่พิมพ์ลงไปหลังจากกดปุ่ม Enter บนคีย์บอร์ดจะถูกส่งเข้าไปยังตัวแปร myvalue

ข้อผิดพลาดที่มักพบได้บ่อยในการใช้งานตัวแปร

      ข้อผิดพลาดต่อไปนี้มักพบได้บ่อยกับผู้เริ่มหัดเขียนโปรแกรม ซึ่งนับว่าเป็นปัญหาหนึ่งที่ทำให้ผู้เริ่มต้นหลีกหนีการเขียนโปรแกรมเนื่องจากขัดกับความรู้สึกในการใช้งานตัวแปรที่เคยพบมาในวิชาคณิตศาสตร์ 

  • หากทำการเรียกใช้ตัวแปรที่ยังไม่ประกาศโค้ดจะไม่สามารถผ่านการคอมไพล์ได้โดยทั่วไปจะฟ้องข้อผิดพลาดเป็น "undeclared variable"
  • Case Sensitivity เนื่องจากในภาษาซีและซีพลัสพลัสตัวอักษรตัวใหญ่และตัวเล็กถือว่าเป็นคนละตัวกัน ดังนั้นหากประกาศตัวแปรเป็นอักษรตัวเล็กแล้วเรียกใช้ชื่อเดียวกันแต่เป็นอักษรตัวใหญ่จะทำให้ไม่สามารถคอมไพล์ผ่านได้ ตัวอย่าง เช่น หากประกาศตัวแปรเป็น
int myvalue;

      และทำการเรียกใช้เป็น

cin >> Myvalue;

      เมื่อคอมไพล์เลอร์ทำการคอมไพล์โค้ดชุดนี้จะพบว่า myvalue และ Myvalue เป็นตัวแปรคนละตัวกันจึงแจ้งข้อผิดพลาด "undeclared variable" เนื่องจากไม่เคยพบตัวแปร Myvalue มาก่อนนั่นเอง

  • การกำหนดค่าให้กับตัวแปรเกินช่วงที่ตัวแปรรับได้ซึ่งข้อผิดพลาดในลักษณะนี้ตัวคอมไพเลอร์จะไม่ฟ้องข้อผิดพลาดแต่จะอาจจะมีการแจ้งเตือนว่ากำหนดค่าเกินช่วงที่ตัวแปรรับได้ ข้อผิดพลาดชนิดนี้เกิดขึ้นได้ในกรณีที่กำหนดขนาดของตัวแปรไม่เหมาะสมกับข้อมูลที่รับเข้ามา ตัวอย่างเช่นการประกาศ char c = 129; ในขณะที่ char สามารถรับข้อมูลได้แค่ -128 ถึง 127 เท่านั้น สำหรับคอมไพเลอร์บางตัวจะมีลักษณะการจัดการกับข้อมูลที่เข้ามาแบบ Round robin หรือแบบวงรอบ ซึ่งหมายถึงหากค่าเกินช่วงไปจะวนไปยังค่าที่อยู่ติดกันและนับต่อไปเรื่อยๆ ดังในกรณีตัวอย่าง c จะมีค่าเกิน 127 จึงวกกลับมาที่ -128 แล้ววิ่งไปตามค่าที่เกินไป 2 ค่าจึงทำให้ c จากโค้ดด้านบนมีค่าเป็น -127 นั่นเองดังที่แสดงไว้ในรูปด้านล่าง

รูปที่ 1. Round robin

 

Reference