บทนำ

ข้อดีของภาษา C และ C++
โปรแกรมเมอร์โดยทั่วไปในปัจจุบันนิยมพัฒนาโปรแกรมด้วยภาษา C และ C++ ด้วยเหตุผล ดังนี้
1.โปรแกรมเมอร์สามารถสร้างโปรแกรมที่ควบคุมการทำงานของคอมพิวเตอร์และการโต้ ตอบระหว่างผู้ใช้กับคอมพิวเตอร์ได้อย่างเต็มประสิทธิภาพ เช่น การเขียนโปรแกรมในลักษณะที่ผู้ใช้ควบคุมโปรแกรมในสภาพแวดล้อม ที่เป็น Event-Driven คือ ผู้ใช้สามารถควบคุมเหตุการณ์ต่าง ๆ ของโปรแกรมในขณะทำงานได้ไม่ใช่ผู้ใช้ถูกควบคุมโดยโปรแกรม ลักษณะการทำงานแบบ Event-Driven ได้แก่โปรแกรมที่ทำงานในสภาพแวดล้อมภายใต้ระบบปฏิบัติการวินโดวส์ เป็นต้น
2. ภาษา C และ C++ มีประสิทธิภาพของภาษาอยู่ในระดับที่ใกล้เคียงกับภาษา Assembly มากที่ สุด แต่มีความยืดหยุ่นในยึดติดกับฮาร์ดแวร์คอมพิวเตอร์หรือ Microprocessor รุ่นใดรุ่นหนึ่ง ทำให้สามารถ นำโปรแกรมที่สร้างขึ้นไปทำงานได้กับเครื่องคอมพิวเตอร์ได้ทุกรุ่น
3. ภาษา C++ สนับสนุนการเขียนโปรแกรมในลักษณะเชิงวัตถุหรือ OOP (Object Oriented Programming) ซึ่งเป็นเทคนิคการเขียนโปรแกรมที่นิยมใช้เขียนโปรแกรมขนาดใหญ่ที่มีจำนวน ข้อมูลใน โปรแกรมมาก
4. โปรแกรมเมอร์ส่วนใหญ่จะนิยมใช้ภาษา C, C++ พัฒนาโปรแกรมประยุกต์ในงานด้านต่าง ๆ เป็นจำนวนมากในปัจจุบัน เพราะประสิทธิภาพของภาษาที่ได้เปรียบภาษาอื่น ๆ

*************************************************************************************************************************
C++ เป็นหนึ่งในภาษาที่ได้รับความนิยมอย่างแพร่หลาย มีโปรแกรมจำนวนมากมายที่ถูกเขียนด้วย C++ เช่น Windows, Word, Excel, PowerPoint, SQL Server, Chrome, Firefox, Safari, Photoshop, MySQL รวมถึง เกม, device driver และโปรแกรมควบคุมการทำงานของ Hardware, microcontroller, robot และอื่น ๆ อีกมากมาย

***********************************************************************************************************************************
อยากทำเว็บ สร้างเกม เขียนแอปจังเลย ! ว่าแต่ภาษาในการเริ่มพัฒนาโปรแกรมมันมีมากมายเต็มไปหมด แล้วเราจะเลือกใช้าภาษาไหนในการสร้างดี ? เลือกทั้งหมดเลยได้ไหม ? หรือ หยุดที่ภาษาเดียวเลยดีไหม ? ไปหาคำตอบกันเลยจ้าา :D




สรุปแบบไวที่สุดด กับพื้นฐานตั้งแต่การทำงานของ Software จนไปถึงพื้นฐานการเขียนโปรแกรมเบื้องต้น ที่ทำให้เราได้ทบทวนพื้นฐาน หรือ รวมความรูทั้งหมดไว้ใน 10 นาที ที่นี่ ที่เดียววว !



**********************************************************************************************************************************************************************************

First step for C++ Programming
C++ จัดเป็นภาษาคอมพิวเตอร์เชิงวัตถุ (Object oriented language) แต่ยังคงสภาพเป็นภาษาเชิงโครงสร้าง (Structure or Procedure oriented language) ไว้ด้วยในขณะเดียวกัน ภาษาคอมพิวเตอร์เชิงวัตถุบางภาษาเช่น Java, Smalltalk ไม่มีคุณสมบัติเช่นนี้ ปัญหาที่มีลักษณะไม่ซับซ้อนมากนัก การออกแบบโปรแกรมให้มีลักษณะเชิงโครงสร้าง สามารถทำได้ง่ายกว่าและรวดเร็วกว่า แต่เมื่อถึงคราวที่จะต้องทำซอฟต์แวร์ขนาดใหญ่ ประกอบด้วยคำสั่งไม่น้อยกว่า สองแสนบรรทัดหรือมากกว่า หรือมีโปรแกรมย่อยขนาดเล็ก ๆ เป็นจำนวนมาก ต้องใช้โปรแกรมเมอร์หลายคน แบ่งหน้ากันทำงาน การเขียนโปรแกรมเชิงวัตถุจะเหมาะสมกว่า เพราะง่ายและสะดวกในการจัดการและบริหารตัวซอฟต์แวร์ที่มีขนาดใหญ่นั้น
ในบทนี้จะกล่าวถึงหัวข้อต่อไปนี้
ทำไมต้องเป็น C++
C++ มีลักษณะเฉพาะตัวที่มีความโดดเด่นและเห็นได้ชัดกว่าภาษาคอมพิวเตอร์อื่น ๆ คือ
Object-oriented programming การโปรแกรมเชิงวัตถุทำให้โปรแกรมเมอร์สามารถออกแบบแอพพลิเคชันในมุมมองแบบวัตถุ การ Coding เป็นการกำหนดให้วัตถุที่สร้างสื่อสารซึ่งกันและกัน สามารถนำโค้ดที่สร้างขึ้นกลับนำมาใช้ใหม่ ทำให้เกิดความผิดพลาดน้อยและสร้างผลงานได้อย่างรวดเร็ว
Portability ในทางปฏิบัติสามารถนำโปรแกรมต้นฉบับของภาษา C++ ไปคอมไพล์ในเครื่องคอมพิวเตอร์ในแพลทฟอร์มใด ๆ หรือระบบปฏิบัติการใด ๆ โดยไม่ต้องแก้ไขดัดแปลงใหม่
Brevity คำสั่งในภาษา C++ มีลักษณะสั้น กระชับรัดกุมกว่าภาษาอื่น ๆ (ทำให้คีย์บอร์ด อายุยืนกว่า : < )
Modular Programming สามารถแบ่งโปรแกรมออกเป็นส่วน ๆ คอมไพล์และนำมาลิงค์ด้วยกัน ช่วยประหยัดเวลาการคอมไพล์ ส่วนใดผิดก็สามารถคอมไพล์แล้วแก้ไขเฉพาะส่วนนั้น นอกจากนี้ยังสามารถนำไปเชื่อมต่อกับภาษาอื่น ๆ เช่น แอสเซมบลี ปาสคาล เป็นต้น
C Compatibility โปรแกรมที่เขียนด้วยภาษา C สามารถนำไปใช้ใน C++ โดยไม่ต้องดัดแปลงคำสั่งใด ๆ
Speed โปรแกรมไบนารีที่คอมไพล์โดย C++ จะมีขนาดเล็ก มีประสิทธิภาพ เพราะ C++ เป็นทั้งภาษาชนิด High level และ low level
ความเป็นมาของภาษา C++
ประมาณ ปีค.ศ. 1969 ห้องปฏิบัติการ Bell ได้พัฒนาระบบปฏิบัติการขึ้นมาใหม่ ต่อมามีชื่อเป็น UNIX โดย Ken Thomson ได้ใช้ภาษาแอสเซมบลีเขียน UNIX บนเครื่อง PDP-7 ต่อมา Martin Richard พัฒนาภาษาระดับสูงชื่อ BCPL ( Basic Combined Programming Language) เพื่อใช้เขียนระบบปฏิบัติการและคอมไพเลอร์ ใช้กับเครื่อง Multics ทอมสันได้ย่อส่วน BCPL ให้มีขนาดเล็กลง เพื่อให้ทำงานได้บนเครื่อง DEC-PDP-7 ซึ่งมีหน่วยความจำเพียง 8 kB เรียกภาษานี้ว่า ภาษา B ทั้ง BCPL และ B เป็นภาษาที่ไม่มีชนิดข้อมูล
ค.ศ. 1971 ได้มีการพัฒนาระบบ UNIX บนเครื่อง PDP-11 ด้วยภาษาแอสเซมบลี และ B
ค.ศ. 1972 Denis Ritchie ได้พัฒนาภาษา B ให้มีความสามารถมากขึ้น โดยนำลักษณะบางส่วนของภาษา Algo 68 มาใส่ร่วมด้วย เรียกว่า ภาษา C ในปีถัดมา ได้ใช้ภาษา C เขียนระบบปฏิบัติการ UNIX เกือบ 90 %
ค.ศ. 1978 Brian Kernighan & Denis Ritchie เขียนหนังสือ The C Programming Language จัดเป็นคัมภีร์ภาษา C
ค.ศ. 1980 Bjarn Stroustrup ขยายขีดความสามารถของ C ให้เขียนเป็นภาษาเชิงวัตถุได้ เรียกว่า C with class ต่อมาในปี 1983 Rich Mascitti ได้ให้ชื่อใหม่เป็น C++
ค.ศ. 1983 สำนักงานมาตรฐานแห่งชาติอเมริกา ( American National Standard Institute, ANSI) ได้ตั้งคณะกรรมการ ชุด X3J11 กำหนดมาตรฐานภาษา C และในปีค.ศ. 1989 ได้ตั้งคณะกรรมการชุด X3J16 กำหนดมาตรฐาน C++
ค.ศ. 1989 กำหนดมาตรฐาน ANSI C ประกอบด้วย K & R C และรวมบางส่วนของภาษา C++ และรวม Standard Library ประกาศเป็น ISO/ IEC 9699:1990 เมื่อ ปีค.ศ. 1990 (ISO – International Standardization Organization, IEC – International Electro technical Commission)
ค.ศ. 1991 คณะกรรมการ ANSI X3J16 รวมตัวกลายเป็นส่วนหนึ่งของ ISO/.IEC JTC1/SC22/WG21
ค.ศ. 1998 ประกาศมาตรฐาน ภาษา C++ (ISO/IEC 14882: 1998)
ค.ศ. 1999 ประกาศมาตรฐาน ภาษา C (ISO/IEC 9899: 1999) เรียกย่อว่า ISO C99
( ข้อมูลจาก www.hitmill.com/programming/cpp)
เริ่มต้นโปรแกรมแรก กับภาษา C++
ในที่นี้จะเริ่มต้นโดยนำ C++ ไปใช้ในงานคำนวณ เป็นการหาพื้นที่ของรูปสี่เหลี่ยมผืนผ้า ซึ่งหาได้จากสูตร กว้าง คูณ ยาว source code ของโปรแกรมมีดังนี้
[source code: FirstPrg.cpp ]
โปรแกรมสั้น ๆ 24 บรรทัดสามารถแยกออกเป็นส่วนประกอบย่อย ๆ โดยเรียงตามลำดับที่ปรากฏในโปรแกรมดังนี้
  1. หมายเหตุของโปรแกรม (Comment)
  2. ส่วนกำกับในการแปลโปรแกรม (Preprocessor Directive)
  3. ฟังก์ชันที่มีชื่อว่า main
  4. ตัวแปร (Variable)
  5. Statement
หมายเหตุของโปรแกรม เป็นส่วนที่ผู้เขียนโปรแกรมบันทึกข้อความเช่น บอกชื่อโปรแกรม จุดประสงค์ของโปรแกรม เงื่อนไขการทำงานของโปรแกรม เพื่อสะดวกในการตรวจแก้ หรือเตือนความจำเมื่อกลับมาอ่านภายหลัง คอมไพเลอร์จะไม่ทำการคอมไพล์ในส่วนที่เป็น comment นี้ ในภาษา C++ จะมีหมายเหตุอยู่สองลักษณะคือ comment ที่เกิดจากรวมกันของบรรทัดหลาย ๆ บรรทัด หรือ comment เฉพาะบรรทัดนั้นเพียงบรรทัดเดียว
บรรทัดที่ 1-8 จะใช้สัญลักษณ์ /* (ในบรรทัดที่ 1) และ */ ( บรรทัด ที่ 8) ข้อความที่อยู่ระหว่างเครื่องหมาย /*…..*/ คือส่วนที่เป็น comment
บรรทัดที่ 14 และ 15 ข้อความที่อยู่ท้ายเครื่องหมาย // จนจบบรรทัดจะเป็น comment
ในการแก้ไชโปรแกรม บางครั้งจะกำหนดมิให้คำสั่งบางบรรทัดทำงาน โดยการใส่ // นำหน้าบรรทัดนั้น หรือถ้าต้องการให้ประโยคคำสั่งหลาย ๆ บรรทัด ไม่ให้ทำงานอาจคร่อมด้วยเครื่องหมาย /*…..*/ แต่ต้องระวังคอมไพเลอร์บางบริษัท ฯ อาจไม่ยอมรับการใช้คอมเมนต์ซ้อนคอมเมนต์
ส่วนกำกับในการแปลโปรแกรม (Preprocessor directive) คือคำสั่งที่ใช้บอกให้คอมไพเลอร์จะต้องทำก่อนที่จะทำการคอมไพล์โปรแกรม คำว่า preprocessing หมายถึงขั้นตอนแรกสุดก่อนที่คอมไพเลอร์จะแปลภาษา C++ ให้อยู่ในรูปภาษาเครื่อง บรรทัดที่ 9 #include <iostream.h> จัดเป็น preprocessor directive คำสั่งหนึ่ง ซึ่งจะใส่ไว้ตรงส่วนหัวของโปรแกรม เป็นคำสั่งให้คอมไพล์นำไฟล์ที่อยู่ในวงเล็บรูปเหลี่ยม ในที่นี้คือ iostream.h มาแทรกตรงส่วนนี้ของโปรแกรมในระหว่างการคอมไพล์ ไฟล์นี้มีคำสั่งที่ช่วยให้เราสามารถใช้คำสั่ง cout ในบรรทัดที่ 19 ซึ่งใช้แสดงผลลัพธ์บนหน้าจอได้ ถ้าลบบรรทัดนี้ออก คอมไพล์เลอร์จะแจ้งข้อความผิดพลาดบนหน้าจอว่าไม่รู้จักคำสั่ง cout
ประโยคที่เป็น preprocessor directive จะไม่มีเครื่องหมาย ; ตามหลัง
สัญลักษณ์ <………..> ที่ใช้คร่อมไฟล์จะเป็นการกำหนดว่า header file นั้นถูกเก็บไว้ในโฟลเดอร์ที่คอมไพเลอร์กำหนดไว้ โดยปกติจะเก็บไว้ภายใต้โฟลเดอร์ที่ชื่อ include ในเทอร์โบซี
เวอร์ชัน 3 ไฟล์นี้จะถูกเก็บไว้ใน c:\tc\include\ ถ้าเราสร้าง include file ของเราเองเก็บไว้ที่เดียวกับโปรแกรมต้นฉบับในโฟลเดอร์ MyCpp จะต้องแจ้งให้คอมไพเลอร์ทราบ โดยเขียนดังนี้
#include “myheader.h”
ระวังอย่าให้มีช่องว่างในเครื่องหมาย <….> และ “…..”
Preprocessor directive จะขึ้นต้นคำสั่งด้วย # (pound sign) โดยทั่วไปจะถูกนำมาใช้ในลักษณะต่อไปนี้
•  ใช้ตัวกำกับ #include เพิ่มหรือแทรกส่วนต่าง ๆ ของโปรแกรม เราสามารถนำตัวแปรต่าง ๆ ไปประกาศไว้ในแฟ้ม include เพียงที่เดียว เพื่อลดความเสี่ยงที่ฟังก์ชันในแฟ้มต้นฉบับอื่น ๆ หาตัวแปรไม่พบ
•  ตัวกำกับที่มีเงื่อนไข (conditional directive) เราสามารถใช้ตัวกำกับที่มีเงื่อนไข เช่น #if, #ifdef, #ifndef, #else, #elseif และ #endif
•  ใช้ควบคุมการแปลโปรแกรมต้นฉบับให้อยู่ภายใต้เงื่อนไขต่าง ๆ เช่น แปลเพียงส่วนใดส่วนหนึ่งของโปรแกรม หรือนำไปคอมไพล์บนระบบปฏิบัติการที่ต่างกัน
ข้อแนะนำ ถ้าต้องการ debug โปรแกรมเป็นช่วง ๆ สามารถใช้ preprocessor แทน /*…..*/ เพื่อป้องกันการเกิด comment ซ้อน comment เช่น
ฟังก์ชัน main( ) บรรทัดที่ 10 เป็นฟังก์ชันที่มีอยู่เสมอในโปรแกรมภาษา C++ ทุก ๆ โปรแกรม เมื่อเรียกใช้โปรแกรมนี้ให้ทำงาน ระบบปฏิบัติการจะใช้ฟังก์ชัน main() เป็นจุดเริ่มต้นของโปรแกรม จากตัวอย่าง
Int main( ) หมายถึงเมื่อจบการรันโปรแกรม ฟังก์ชัน main( ) จะส่งค่ากลับเป็นจำนวนเต็ม (integer) ไปยังระบบปฏิบัติการ ในที่นี้คือ 0 ดูได้จากบรรทัดที่ 16 return 0; main เป็นชื่อฟังก์ชัน ( ) ในวงเล็บว่างเปล่า แสดงว่าไม่มีพารามิเตอร์ใด ๆ ที่ใช้ในฟังก์ขัน main
คำสั่งโปรแกรมจะอยู่ระหว่างเครื่องหมายปีกกาเสมอ ดังรูปแบบต่อไปนี้
ถึงแม้จะไม่มีค่าว่า int นำหน้า main (และฟังก์ชันอื่น ๆ ก็เช่นกัน) จะถือว่าฟังก์ชันนั้นส่งค่ากลับเป็นแบบจำนวนเต็ม
รูปแบบเต็มของฟังก์ชัน main มีดังนี้
iในระบบปฏิบัติการวินโดวส์ จุดเริ่มต้นของโปรแกรมที่ทำงานภายใต้สภาพแวดล้อมของวินโดวส์จะเป็น
int WinMain ( ) { }
ฟังก์ชัน main ( ) จะส่งค่ากลับไปยังระบบปฏิบัติการ เพื่อใช้ตรวจการประมวลผลของโปรแกรมว่ามีข้อผิดพลาดบ้างหรือไม่ ถ้าโปรแกรมส่งค่า “ ศูนย์ ” กลับมา แสดงว่าการประมวลผลเป็นไปอย่างเรียบร้อยไม่มีปัญหา ถ้าค่าที่ส่งกลับมาไม่ใช่ศูนย์ แสดงว่ามีปัญหาเกิดขึ้น โปรแกรมส่วนใหญ่จะส่งค่าระหว่าง 1 ถึง 5 ถ้ามีปัญหาค่อนข้างร้ายแรงระหว่างโปรแกรมทำงาน ระบบปฏิบัติการสามารถใช้ตัวเลขเหล่านี้เป็น error code ในระหว่างการประมวลผล batch file ซึ่งอาจใช้ให้ระบบปฏิบัติการยกเลิกการทำงานหรือทำงานส่วนอื่นขึ้นอยู่กับความต้องการของผู้เขียน batch file
ตัวแปร (variable) คือพื้นที่หน่วยความจำที่ใช้เก็บข้อมูล โดยการระบุชื่อ (identified) สมบัติที่สำคัญของตัวแปรมีอยู่ 3 อย่างคือ ชนิด (type) ขอบเขต (scope) และ ลักษณะการจัดเก็บข้อมูล (storage class) ว่าเป็นแบบ auto หรือ register หรือ extern หรือ static ซึ่งจะกล่าวอย่างละเอียดในหัวข้อตัวแปร
จากบรรทัดที่ 12 float width, length, area;
float เป็นชนิดของตัวแปร มีตัวแปรชนิดนี้อยู่ 3 ตัวคือ width, length และ area
Statement หรือ ถ้อยแถลง หรือ กระทงความ อาจเป็นประโยค หรือวลี หรือคำเพียงหนึ่งคำ ปิดท้ายด้วยเครื่องหมาย semi colon เสมอ
บรรทัดที่ 13 14 และ 17
14: width = 30.0;
15: length= 120.0;
16: //Compute area of rectangle.
17: area = width*length;
เป็นการกำหนดค่า (assign) ให้ตัวแปร width และ length
บรรทัดที่ 19 เป็น statement ที่ใช้พิมพ์ผลลัพธ์ของโปรแกรมออกที่จอภาพ
19: cout << " Area of this rectangle = "
20: << area << " sqr.meter" << endl;
cout ย่อมาจากค่ำว่า Console Output อ่านว่า ซี – เอาท์ cout จะนำข้อความ Area of this rectangle = แสดงออกที่จอภาพ สัญลักษณ์ << หมายถึง Output operator หรือ insertion operator เป็นการนำข้อความส่งตามมาด้วย ซึ่งเป็นค่า area ที่คำนวณได้จากบรรทัดที่ 17 การส่งข้อความทั้งหลายไปยัง cout จะต่อเนื่องเหมือนกับเป็นกระแสข้อความ ค่าในตัวแปรทั้งหลายที่ส่งนี้เรียกว่า stream cout จะแสดงผลเรียงตามลำดับก่อนหลังที่ปรากฏอยู่หลังเครื่องหมาย <<
endl หมายถึง end of line เป็นการกำหนดให้ขึ้นบรรทัดใหม่
return 0; เป็นการส่งค่ากลับของฟังก์ชัน main() ไปยังระบบปฏิบัติการ มีค่าเป็นศูนย์เมื่อการทำงานของโปรแกรมเป็นไปอย่างราบรื่น
ข้อควรระวัง ประโยคที่นิยามตัวแปร และ statement ต้องปิดท้ายด้วย ; เสมอ
คอมไพเลอร์ภาษา C++ ในยุคหลัง ๆ รวมทั้ง Borland C ++ Compiler ที่กำลังใช้อยู่นี้ด้วย ได้เพิ่ม การใช้งาน “namespace” รวมเข้าไว้ด้วย namespace จะช่วยแบ่งขอบเขตการเรียกใช้คลาส ตัวแปร เมธอด ต่าง ๆ มิให้โปรแกรมสับสน นิยมใช้กับโปรแกรมที่มีขนาดใหญ่ มีผู้ร่วมเขียนโปรแกรมหลายคน มีการเรียกใช้ Library จากที่แหล่งต่าง ๆ เป็นจำนวนมาก เพราะบางครั้งอาจมีการตั้งชื่อคลาส ตัวแปร หรือเมธอด ซ้ำกัน การกำหนดขอบเขตให้ชัดเจน จะทำให้โปรแกรมสามารถเรียกใช้คลาส ตัวแปร หรือ เมธอดได้อย่างถูกต้อง
เนื่องจากโปรแกรมของเรามีขนาดสั้น ตัวแปรที่ใช้ และฟังก์ชันต่าง ๆ จึงมีไม่มากนัก ในที่นี้จึงไม่ใช้ namespace ใส่ไว้ในโปรแกรม
พารามิเตอร์ของฟังก์ชัน main ( )
โปรแกรม 1-1 เป็นการคำนวณหาพื้นที่สี่เหลี่ยมผืนผ้า (เช่น สนามฟุตบอล) จะเห็นว่าเรากำหนดความกว้าง ความยาวไว้ในโปรแกรม นั่นหมายถึงถ้าจะใช้โปรแกรมนี้คำนวณพื้นที่สี่เหลี่ยมผืนผ้ารูปอื่น ๆ จะต้องเปลี่ยนค่า width และ length ในโปรแกรมต้นฉบับ จากนั้นจึงคอมไพล์ สร้าง execute file ขึ้นมาใหม่ และทำซ้ำเช่นนี้ทุกครั้ง ที่เปลี่ยนค่าความกว้างและความยาว
จะเป็นการสะดวกถ้าเราจะใช้โปรแกรมนี้คำนวณหาพื้นที่สี่เหลี่ยมผืนผ้าใด ๆ เช่น ต้องการคำนวณหาพื้นที่ของสี่เหลี่ยมผืนผ้า กว้าง 45 เมตร ยาว 72 เมตร สามารถพิมพ์คำสั่งต่อไปนี้ที่ระบบปฏิบัติการ
C: > findarea 45 72 ( กด enter)
จะได้ผลลัพธ์
Rectangle area = 3240 sqr meter
เราสามารถทำเข่นนี้ได้ โดยอาศัยพารามิเตอร์ของฟังก์ชัน main ดังโปรแกรม 1.2 ดังนี้
[Source code: FindArea.cpp]
เมื่อเราพิมพ์ C: > findarea 45 72 ( กด enter) ค่าความกว้าง 45 เมตรและความยาว 72 เมตร ระบบปฏิบัติการ จะเก็บค่านี้ไว้ในตัวแปร argv[1] และ argv[2] นำค่าที่ได้นี้ไปเก็บไว้ที่ตัวแปร width และ length จากนั้นคำนวณหาพื้นที่สี่เหลี่ยมผืนผ้าเก็บค่าที่ได้ไว้ใน area คำสั่ง cout จะพิมพ์ คำตอบ 3240 ปรากฎบนจอภาพ
โปรแกรมต่อไปนี้ จะตรวจสอบพารามิเตอร์ของฟังก์ชัน main() ที่รับค่าต่าง ๆ จากระบบปฏิบัติการ
[Source code: TestArg.cpp]
เมื่อพิมพ์คำสั่ง
C:> testarg test1 test2 test3 test4 ( กด enter)
ฟังก์ชัน main( ) ของโปรแกรม testarg จะรับค่าพารามิเตอร์มา 5 ค่า ค่าต่าง ๆ จะถูกเก็บไว้ใน argv [ ] ดังรูป
ตัวแปร env[ ] จะเก็บค่าสภาพแวดล้อมของระบบปฏิบัติการ ซึ่งจะแตกต่างกันไปในแต่ละเครื่อง ขึ้นอยู่กับค่าที่กำหนดไว้ใน autoexec.bat และ config.sys ในระบบปฏิบัติการ DOS เราสามารถใช้คำสั่ง set ตรวจสอบสภาพแวดล้อมนี้ได้
ลองทดลองพิมพ์ C:> testarg one two “three four” five six ( กด enter)
ตัวแปรและค่าคงที่ (Variables and Constants)
ตัวแปรคือเนื้อที่ของหน่วยความจำที่ใช้เก็บข้อมูล ข้อมูลที่เก็บนี้อาจมีการเปลี่ยนแปลงค่าในระหว่างการประมวลผล เราจะกำหนดชื่อ (identifier or variable name) ให้กับตัวแปรเพื่อที่สะดวกในการอ้างอิงถึงในการเขียนโปรแกรม
การกำหนดชื่อตัวแปรมีหลักดังนี้
•  มีความยาวกี่ตัวอักษรก็ได้ ต้องขึ้นด้วยตัวอักษร A ถึง Z หรือ a ถึง z และเครื่องหมาย _ (under score) เท่านั้น ขึ้นต้นด้วยตัวเลขไม่ได้
•  อักษรถัดจากตัวแรกจะเป็นตัวอักษร หรือ ตัวเลข หรือ เครื่องหมาย _
•  ห้ามมีช่องว่างหรือเครื่องหมายทางคณิตศาสตร์ เช่น +, - , *, / , ^, <<, >>, (, ), [, ], {, }, %, $, &
•  อักษรตัวใหญ่ตัวเล็ก มีผลต่อชื่อตัวแปร เช่น Area กับ area ภาษา C++ จะถือว่าเป็นตัวแปรคนละตัวกัน
•  ชื่อของตัวแปรจะต้องไม่ซ้ำกับคำที่สงวนไว้ ( Reserved word or token) ในภาษา C++ มีดังนี้
and
and_eq
asm
auto
bitand
bitor
bool
break
case
catch
char
class
const
const_cast
continue
default
delete
do
double
dynamic_cast
else
enum
explicit
export
extern
false
float
for
friend
goto
if
inline
int
long
mutable
namespace
new
not
not_eq
operator
or
or_eq
private
protected
public
register
reinterpret_cast
return
short
signed
sizeof
static
static_cast
struct
switch
template
this
throw
true
try
typedef
typeid
typename
union
unsigned
using
virtual
void
volatile
wchar_t
while
xor
xor_eq





คำสงวนบางคำ คอมไพเลอร์รุ่นเก่าไม่ได้นับรวมหรือจัดไว้ว่าเป็นคำต้องห้าม ถึงกระนั้นก็ตามเราควรหลีกเลี่ยงชื่อตัวแปรโดยไม่ใช้ชื่อซ้ำกับคำเหล่านี้ คอมไพเลอร์บางบริษัทมีการเพิ่มคำสงวนเพิ่มเฉพาะเข้าไปอีก เช่น Borland compilers for the PC มีการเพิ่มคำว่า near, far, huge, cdecl และ pascal
จะเห็นว่า main, cin และ cout ไม่ใช่เป็นคำสงวน แต่ในทางปฏิบัติไม่ควรตั้งชื่อตัวแปรให้ซ้ำกับคำเหล่านี้เช่นกัน
•  การตั้งชื่อตัวแปรควรสื่อความหมาย เพี่อประโยชน์ในการทำความเข้าใจการทำงานของโปรแกรม และสะดวกในการตรวจแก้ไขโปรแกรม
•  ในระบบปฏิบัติการวินโดวส์ ได้เสนอแนะให้ใช้การตั้งชื่อตัวแปรแบบ Hungarian notation ซึ่งในชื่ตัวแปรนั้นจะบอกชนิดของข้อมูล วัตถุประสงค์ของตัวแปรว่าจะนำไปใช้ทำอะไร
หลักการตั้งชื่อตัวแปรสารมารถนำไปใช้กับชื่อฟังก์ชัน คลาส และ structure ได้อีกด้วย
ชนิดของข้อมูล (Data type)
จะเป็นตัวบอกให้คอมไพเลอร์รู้ว่าข้อมูลที่เก็บไว้ในหน่วยความจำ จะนำไปประมวลผลในลักษณะใดบ้าง แบ่ง ข้อมูลที่สมารถนำไปคำนวณได้ (numeric data type) หรือเป็นข้อมูลที่ไม่สามารถนำไปคำนวณได้ เช่น อักขระ ต่าง ๆ หรือข้อมูลตรรกะ (Logical data type)
ขนาดของหน่วยความจำที่ใช้เก็บข้อมูลจะแปรเปลี่ยนไปตามระบบปฏิบัติการ หรือตามแพลทฟอร์มของคอมพิวเตอร์ที่ใช้ประมวลผล คอมไพเลอร์ที่ถูกสร้างขึ้น ในระบบปฏิบัติการ DOS และใน Unix จะใช้เนื้อที่ในการเก็บข้อมูลต่างกัน ความแม่นยำ ความถูกต้องของจำนวนเลข ค่าสูงสุด ค่ำต่ำสุดที่เก็บได้จะต่างกันไปด้วย แต่โดยทั่วไป ขนาดของหน่วยความจำที่ใช้เก็บข้อมูลจะเป็นไปตามตารางข้างล่างนี้
ตารางจำแนกชนิดของข้อมูลใน C++
ชนิดข้อมูลรายละเอียดจำนวน byteค่าที่เป็นไปได้ต่ำสุดค่าที่เป็นไปได้สูงสุด
ข้อมูลที่เก็บแบบจำนวนเต็ม
charข้อมูลชนิดตัวอักษรโดยเก็บรหัส ASCII ของตัวอักษรนั้น1-128127
unsigned charข้อมูลชนิดตัวอักษรไม่คิดเครื่องหมาย10255
shortจำนวนเต็ม2-32,76832,767
unsigned shortจำนวนเต็มไม่คิดเครื่องหมาย2065,535
longจำนวนเต็มทั้งบวกและลบ4-2,147,483,6482,147,483,647
unsigned longจำนวนเต็มบวก404,294,967,295
intเช่นเดียวกับ long2-32,76832,767
unsigned intเข่นเดียวกับ unsigned long2065,535
int64จำนวนเต็ม8-9,223,372,036,854,775,8079,223,372,036,854,775,808
ข้อมูลที่เก็บแบบเลขทศนิยม ( Floating Point)
floatจำนวนจริงแบบ single precision41.75494E-383.402823E+38
double82.2250738585E-3081.7976931348E+308
long doubleจำนวนจริงแบบ double precision103.3621031431E-49321.1897314953E+4932
ช้อมูลชนิดตรรกะ ( Boolean data type)
boolข้อมูลชนิดตรรกะ1truefalse
ถ้าเราต้องการทราบว่าขอบเขตของชนิดข้อมูลในแพลตฟอร์มที่เราใช้งานอยู่ ทำได้โดยพิมพ์ค่าขีดจำกัดบนและล่างของข้อมูลแต่ละชนิด โดยอาศัยค่าคงที่ ที่กำหนดไว้ใน header file ที่ชื่อว่า limits.h และ float.h ดังตัวอย่างต่อไปนี้
[Soruce code : TestLimit.cpp]
ภาษา C และ C++ ในยุคแรก ๆ ไม่แยกชนิดช้อมูลแบบตรรกะออกมาเป็นเอกเทศ จะตรวจสอบ “ จริง ” หรือ “ เท็จ ” จากข้อมูลชนิด int ถ้ามีค่าไม่เป็นศูนย์ แสดงว่า “ จริง ” ถ้ามีค่าเป็นศูนย์แสดงว่าเป็น “ เท็จ ”
ค.ศ. 1993 คณะกรรมการ ANSI X3J16 และ ISO WG21 ได้ประชุมร่วมกันโดยเพิ่มข้อมูลชนิด bool ซึ่งจะรับค่าเพียง 2 ค่า คือ จริงและเท็จ (true , false) เมื่อแปลงข้อมูลชนิด bool ให้เป็นชนิด int จะได้ true เป็น 1 และ false มีค่าเป็นศูนย์ เมื่อแปลงข้อมูลชนิด int เป็น bool ค่าที่เป็น non-zero จะมีค่าเป็น true และ 0 มีค่าเป็น false
คอมไพเลอร์รุ่นหลัง พฤศจิกายน 1993 ที่สามารถใช้ข้อมูลชนิด bool ได้ เช่น GNU C++ v2.6.1 Turbo C++ v 4.0
คอมไพเลอร์รุ่นเก่า สามารถใช้ข้อมูลชนิด bool ได้ โดยเพิ่มประโยคต่อไปนี้
typedef char bool; // define type tool
const bool false = 0; // init false
const bool true = 1; // init true.
โปรแกรมต่อไปนี้จะเป็นโปรแกรมใช้ตรวจสอบขนาดของข้อมูลแต่ละชนิด
[Source code: TestVarSize.cpp]
ข้อสังเกต : sizeof ถือว่าเป็น operator ตัวหนึ่ง ใช้บอกขนาดของหน่วยความจำ ที่ใช้เก็บข้อมูลชนิดนั้น sizeof (ch) อาจเขียนเป็น sizeof ch ก็ได้ โดยที่ไม่ต้องใส่วงเล็บ
ผลของการรันโปรแกรมที่ 1.4 จะเป็นดังนี้
ค่าคงที่ (Symbolic Constants)
ถ้าข้อมูลนั้นไม่มีการเปลี่ยนแปลงค่าตั้งแต่ต้นโปรแกรมจนจบการทำงาน เรานิยมกำหนดข้อมูลนั้นให้เป็นค่าคงที่ การกำหนดชื่อค่าคงที่ จะนำหน้าด้วย const ตามด้วยชนิดของข้อมูล และชื่อค่าคงที่ ปิดท้ายประโยคด้วย ; เสมอ เช่น
Const double PI = 3.141592653;
เมื่อนำไปใช้ในโปรแกรม เช่น area = PI * radius * radius ; ค่า PI จะถูกแทนที่ด้วย 3.141592653..
ตัวอย่างค่าคงที่อื่น ๆ ที่ใช้บ่อยในการคำนวณทางวิทยาศาสตร์ กำหนดให้เป็นค่าคงที่จะได้
const double EARTH_GRAVITY = 9.81; // acceleration due to gravity
const double ELECTRIC_CHARGE = 1.602177e-19 ; // an Electric charge
const double LIGHT_SPEED = 2.999792e+8; // speed of light in vacuum
const int DAY_IN_A_YEAR = 365;
const char TAB = ‘'\t';
const float VATRATE = 0.07;
const SECOND_IN_HOUR = 3600;
บรรทัดสุดท้าย ไม่มีการระบุชนิดข้อมูล จะถือว่าเป็นข้อมูลชนิด int
คอมไพเลอร์จะมองเห็นค่าคงที่เป็นเลขฐานสิบเสมอ เราสามารถเขียนค่าคงที่ให้คอมไพเลอร์มองเห็นเป็นเลขฐานแปด หรือ ฐานสิบหกได้ จำนวนเลขใดที่ขึ้นต้นด้วย 0 (ศูนย์) นำหน้า C++ จะคิดว่าเป็นเลขฐานแปด เช่น
023 หมายถึง 19 ในเลขฐานสิบ
010 หมายถึง 8 ในเลขฐานสิบ
จำนวนเลขใดที่ขึ้นต้นด้วย 0x (ศูนย์ กับ เอกซ์) จะมองว่าเลขฐานสิบหก เช่น
0xa หรือ 0xA หมายถึง 10 ในเลขฐานสิบ
0x2f หรือ 0x2F หมายถึง 47 ในเลขฐานสิบ
จำนวนจริง เขียนได้ในรูปแบบใส่จุดทศนิยม หรือใช้ตัวอักษร e แทนการเขียนตัวเลขยกกำลัง เช่น
0.0
32.68
-3e5 หมายถึง 
ถ้าต่อท้ายตัวเลขด้วย f หรือ F จำนวนเลขนั้นจะถูกเก็บเป็นแบบข้อมูลชนิด float ถ้าต่อท้ายตัวเลขด้วย l หรือ L จำนวนเลขนั้นจะถูกเก็บเป็นแบบข้อมูลชนิด long double จำนวนจริงที่ไม่มีตัวอักษร f(F) หรือ l(L) ต่อท้าย คอมไพเลอร์จะมองเห็นเป็น double
ข้อมูลชนิด char อักขระ 1 ตัวจะอยู่ในเครื่องหมาย single quote เช่น ‘a', ‘3', ‘\n' เมื่อมีอักขระหลาย ๆ ตัว หรือ วลี จะอยู่ในเครื่องหมาย double quote เช่น “Area of rectangle”, “Hello, world”. เรียกอักขระหรือวลีเหล่านี้ว่า String
ข้อมูลชนิด char ยังสามารถเก็บสัญลักษณ์พิเศษที่ไม่สามารถแสดงผลบนจอภาพ เรียกอักขระเหล่านี้ว่าเป็น escape sequence ประกอบด้วยตัวอักษร 1 ตัว นำหน้าด้วย \ ( back slash)
Escape sequence
ความหมาย
\a
alert character (bell)
\b
backspace
\f
form feed
\n
New line
\r
Carriage return
\t
Horizontal tab
\v
Vertical tab
\\
Back slash
\?
Question mark
\'
Single quote
\”
Double quote
\xff
Character constant in hex
การกำหนดค่าให้กับตัวแปร (Assignment)
การกำหนดค่าให้ตัวแปร ใด ๆ คือ การนำค่าคงที่หรือชื่อของตัวแปรหรือ ผลที่เกิดจากการคำนวณทางคณิตศาสตร์ ไปใส่ไว้ในหน่วยความจำที่มีชื่อเป็นของตัวแปรนั้น เช่น
Float width, length, area;
width = 30.0;
length= 120.0;
area = width*length;
เป็นการกำหนดค่าตัวแปรชื่อ width และ length มีค่าเป็น 30.0 และ 120.0 ( 30.0 และ 120.0 เป็นค่าคงที่ที่เป็นตัวเลขแบบทศนิยม) และกำหนดค่าตัวแปร area มีค่าเท่ากับผลคูณของตัวแปร width และ length จากตัวอย่าง ถ้าเปลี่ยนการกำหนดค่าเป็นดังนี้
width = 30.0;
length= width;
เป็นการกำหนดค่าให้ length มีค่าเท่ากับ width คือ 30.0 อาจเขียนให้อยู่ในบรรทัดเดียวกันได้ดังนี้
width = length = 30.0;
แต่เราไม่สามารถเขียนการกำหนดค่า 20 = width เพราะกำหนดค่าตัวแปรให้กับค่าคงที่ไม่ได้
ถ้าการกำหนดค่าตัวแปรให้ไม่ตรงกับชนิดของข้อมูล ข้อมูลจะถูกแปลงค่าให้เหมาะสมกับชนิดของข้อมูลของตัวแปรนั้น เช่น
int x;
x = 4.5;
x เป็นข้อมูลชนิด จำนวนเต็ม ไม่สามารถเก็บเลขทศนิยม ดังนั้นตัวแปร x จะเก็บค่า x = 4 ไว้ในหน่วยความจำเท่านั้น ข้อมูลจะไม่ถูกต้องสมบูรณ์ ถ้าเราใส่ข้อมูลชนิด float ให้กับตัวแปรชนิด integer
ข้อมูลที่เรากำหนดให้ตัวแปรจะมีการสูญหายหรือไม่ตรงกับความเป็นจริงหรือไม่ ให้ตรวจสอบกับลำดับของชนิดข้อมูลโดยเรียงจากขนาดหน่วยความจำและตัวเลขสูงสุดที่เก็บได้ดังนี้
สูง
long double
double
float
long int
int
short int
ต่ำ
char

กรณีแรก ถ้าข้อมูลที่มีชนิดสูงกว่าถูกกำหนดให้แก่ตัวแปรที่มีชนิดข้อมูลต่ำกว่า ข้อมูลจะมีการสูญหายและผลลัพธ์ที่ได้อาจไม่ถูกต้อง กรณีที่ 2 ถ้ากำหนดข้อมูลที่มีชนิดต่ำกว่าให้กับตัวแปรข้อมูลที่มีชนิดข้อมูลสูงกว่า ข้อมูลจะถูกต้อง ไม่เกิดปัญหา
จะเห็นว่าไม่ได้นำข้อมูลชนิด unsigned integer เข้ามาไว้ในรายการ เพราะจะทำให้เกิดความคลาดเคลื่อนเสมอ ทั้งสองกรณี อย่างไรก็ตามควรกำหนดค่าให้ถูกต้องกับชนิดของข้อมูลจะเป็นการดีที่สุด
เมื่อกำหนดค่าคงที่ให้แก่ข้อมูล คอมไพเลอร์จะรู้ว่าเป็นข้อมูลชนิดใดจะดูจากรูปแบบการเขียนจำนวนเลขดังต่อไปนี้
int จะเป็นตัวเลขที่ไม่มีทศนิยม เช่น 1, 0 , -8, 123, -6385, 0xff (เลขฐานสิบหก)
long int เป็นเลขจำนวนเต็มที่มี L ต่อท้าย เช่น 1L, 0L,-8L, 123L, -6385L, 0xffL (ใช้ l ก็ได้ แต่จะดูคล้ายเลขหนึ่ง)
double ตัวเลขจำนวนจริงที่อยู่ในรูปทศนิยม หรือเลขดรรชนี เช่น 1.0, 0.0, 1234.56, 5e2 ( ), 3.2e6 ( ), 6.23e-34 ( )
โปรแกรม 1.5 จะเป็นการทดสอบว่า เมื่อไม่กำหนดค่าให้กับตัวแปร และบางแห่งมีการกำหนดค่าให้กับตัวแปร คอมไพเลอร์จะแสดงผลการคอมไพล์อย่างไรบ้าง
[Source code: testType.cpp]
ผลลัพธ์การรันโปรแกรม 1.5 จะเป็นดังนี้
ก่อนนำตัวแปรไปใช้งานจะต้องกำหนดค่าเริ่มต้นให้ก่อนเสมอ เพราะคอมไพเลอร์จะไม่เตือนเรื่องการกำหนดค่าเบื้องต้นให้ทราบ สิ่งที่โปรแกรมนำมาแสดงคือ ข้อมูลขยะ ผู้เขียนโปรแกรมจะต้องเป็นฝ่ายรับผิดชอบ และรอบคอบ ในการกำหนดค่าเริ่มต้นให้กับตัวแปรเอง
การแปลงชนิดข้อมูล (Type Casting)
เมื่อกำหนดค่าให้แก่ตัวแปรซึ่งเป็นชนิดข้อมูลต่างกัน เช่น กำหนดตัวแปรไว้เป็นจำนวนเต็ม เช่น
int i;
i= 3.14;
ตัวแปร i จะเก็บค่าไว้เพียง i = 3; เพราะ i เป็นตัวแปรแบบจำนวนเต็ม จะไม่เก็บค่าทศนิยม
จากตัวอย่างโปรแกรม 1.1 เรากำหนดข้อมูล width และ length เป็น float แต่เมื่อป้อนจำนวนเต็ม เช่น width=20 length = 15 ตัวแปรชนิด float สามารถรับจำนวนเต็มได้ โดย C++ จะแปลงจำนวนเต็มให้เป็นจำนวนจริง ค่าที่เก็บไว้ใน width และ length จึงเป็น 20.0 และ 15.0 ตามลำดับ
เมื่อกำหนดค่าข้อมูลที่มีชนิดต่ำกว่า ให้แก่ตัวแปรที่มีข้อมูลชนิดสูงกว่า ไม่จำเป็นต้องใส่ type cast operator ดังตัวอย่างโปรแกรมที่ 1.6 เป็นการแปลงช้อมูลชนิด char ให้เป็น short ให้เป็น int ให้เป็น long ไปเรื่อย ๆ จนถึง double
[Source code: TestCast.cpp]
ผลลัพธ์จากการกำหนดค่า ch ซึ่งเป็นตัวแปรชนิด char ให้มีค่าเป็น “a” ซึ่งมีค่ารหัสอัสกีเท่ากับ 97 เมื่อกำหนดค่านี้ให้กับข้อมูลที่มีชนิดสูงกว่า พบว่าข้อมูลที่เก็บไม่มีความคลาดเคลื่อน ผลของการทำงานของโปรแกรม 1.6 จะเป็นดังนี้
ถ้าการคำนวณทางคณิตศาสตร์เกี่ยวข้องกับข้อมูลต่างชนิดกัน ผลลัพธ์ที่ได้อาจเกิดความคลาดเคลื่อน ตัวอย่างเช่น
int i=12, j=4, k=3;
int m;
m = i*(j/k);
ค่าของที่คำนวณได้คือ 12 ไม่ใช่ 16 เพราะ j/k = 4/3 = 1 (เก็บเฉพาะจำนวนเต็ม ตัดเลขทศนิยมทิ้ง ) ผลลัพธ์จึงได้ 12
เราสามารถใช้คำสั่ง ที่มีรูปแบบ ดังนี้ type(value) เมื่อ type คือชนิดของข้อมูลที่ต้องการ value คือข้อมูลของอีกชนิดหนึ่งซึ่งต้องการเก็บค่าไว้ เช่น
x = 6.3124;
ต้องการเก็บค่าไว้ในตัวแปร i ซึ่งเป็นข้อมูลชนิดจำนวนเต็ม สามารถเขียนได้เป็น
i = int (x); หรือ i = (int) x
ตัวอย่างผลลัพธ์ที่เกิดจากการแปลงชนิดข้อมูล
int (4.5) = 4
float (2) = 2.0
float (3/2)= 1.0
float(3)/float(2) = 1.5
[Source code: TestCas2.cpp]
ผลลัพธ์จากการรันโปรแกรม จะเห็นว่า ถึงแม้จะใช้คำสั่ง casting ข้อมูลในบรรทัดที่ 9 ผลลัพธ์ที่ได้มีค่าเท่ากับกำหนดค่าโดยตรง
m = 6
n = 6
เมื่อนำข้อมุลชนิดสูงกว่า เช่น double ไปเก็บไว้ในข้อมูลชนิดต่ำกว่า เช่น integer ดังในตัวอย่าง 1.7 พบว่าเลขทศนิยมจะถูกตัดทิ้ง (truncate) ไม่มีการปัดเศษ
เครื่องหมาย หรือตัวปฏิบัติการ ( Operator)
จะเป็นตัวบอกกับโปรแกรมว่าจะให้จัดการกับข้อมูลทั้งนั้นอย่างไร เช่น นำข้อมูลมาคำนวณ นำมาตรวจสอบว่าข้อมูลทั้งสองชุดเท่ากันหรือไม่ หรือสลับค่าข้อมูลในตัวแปร
ในโปรแกรม 1.1 เราได้พบกับเครื่องหมาย = หมายถึงการกำหนดค่าให้กับตัวแปร และ width * length เครื่องหมาย * หมายถึงนำตัวแปรทั้งสองมาคูณกัน
ในภาษา C++ มีเครื่องหมายให้ใช้เป็นจำนวนมาก สามารถจำแนกเครื่องหมายที่ใช้บ่อย ๆ ให้เป็นหมวดหมู่ดังนี้
สัญลักษณ์ความหมายตัวอย่างหมายเหตุ
+ หรือ -บอกว่าเป็นจำนวนบวกหรือลบ+x,+3,+5.2, -x, -3, -5.2เป็น unary operator
+การบวก (Addition)z = x + y
-การลบ (Subtraction)z = x – y
*การคูณ (multiplication)z = x*y
/การหาร (division)z = x/y
%การหารเก็บเศษ (modulus)z= x%y
5 %2 จะได้ผลลัพธ์ 1 เก็บเฉพาะเศษไว้
ไม่สามารถใช้กับเลขทศนิยมได้

ภาษา C++ มีเครื่องหมายที่เกี่ยวข้องกับการคำนวณและใช้บ่อย ได้แก่
++ หมายถึงการเพิ่มค่าครั้งละ 1 เช่น x++ หมายถึง x = x +1 (เพิ่มค่าข้อมูลในตัวแปร x อีก 1 จากนั้นนำค่าที่ได้ไปเก็บไว้ในตัวแปร x เช่นเดิม
- - หมายถึงการลดค่าครั้งละ 1 เช่น x- - หมายถึง x = x -1 (ลดค่าข้อมูลในตัวแปร x อีก 1 จากนั้นนำค่าที่ได้ไปเก็บไว้ในตัวแปร x
นิพจน์ทางคณิตศาสตร์ (Arithmetic expression)
เราสามารถนำตัวแปร เครื่องหมายทางคณิตศาสตร์ ค่าคงที่ มาเรียบเรียงเป็นนิพจน์เพื่อนำไปใช้ในการคำนวณได้ สิ่งที่ต้องพึงระวังเป็นอย่างยิ่งในการเขียนข้อความทางคณิตศาสตร์ คือ ต้องรู้ลำดับการทำงานของเครื่องหมาย มิฉะนั้นจะได้ผลการคำนวณออกมาคลาดเคลื่อน โดยที่คอมไพเลอร์ไม่แสดงข้อความเตือนหรือแจ้งข้อผิดพลาดให้ทราบ เช่น
X = 5 + 2*3
จะได้ค่า x เท่ากับ 11 ไม่ใช่ 21 เพราะการคูณมีลำดับการทำงานก่อนเครื่องหมายบวก เพื่อให้ดูเข้าใจง่าย ควรเขียนเป็น
X = 5 + (2*3)
ลำดับการทำงานก่อนหลังของเครื่องหมายทางคณิตศาสตร์เป็นไปดังตารางต่อไปนี้ เครื่องหมายที่อยู่ส่วนบนของตารางจะมี่ลำดับความสำคัญกว่าลำดับที่อยู่รองลงไป เครื่องหมายที่มีลำดับความสำคัญเท่ากัน จะเริ่มกระทำจาซ้ายไปขวา หรือจากขวาไปซ้ายตามที่กำหนดไว้ในตาราง การคูณจะเริ่มคำนวณจากทางซ้ายไปขวามือ x*y*z หมายถึง (x*y)*z ไม่ใช่ x*(y*z)
ลำดับเครื่องหมายหรือตัวปฏิบัติการ (operator)เริ่มประมวลผลจาก (Associativity)
1( )parenthesesเริ่มกระทำจากวงเล็บในสุด
2+ , -, ++, - - , castunary operatorขวาไปซ้าย
3*, /, %การคูณ การหาร และการหารเก็บเศษซ้ายไปขวา
4+, -การบวก การลบซ้ายไปขวา
5=, +=, -=, *=, /=, %=assignmentขวาไปซ้าย

ตัวอย่างการเขียนนิพจน์ทางคณิตศาสตร์
•  พื้นที่สี่เหลี่ยมคางหมู = ½ x สูง x ผลบวกของด้านคู่ขนาน
Area = 0.5 * h * (a + b);
•  ระยะกระจัดของก้อนหินที่ตกลงมาอย่างอิสระภายใต้สนามโน้มถ่วงของโลก ด้วยความเร็วต้น u ที่เวลา t ใด ๆ คือ  เมื่อ g คือความเร่งเนื่องจากแรงดึงดูดของโลก
y= u* t + 0.5 * g * t* t;
•  แรงไฟฟ้าเนื่องจากจุดประจุขนาด q 1 และ q 2 วางห่างกันเป็นระยะ r ใด ๆ หาได้จาก
 เมื่อ k คือค่าคงที่
เขียนเป็นนิพจน์ทางคณิตศาสตร์ในภาษา C++ ได้ดังนี้
F = k*q1 * q2/(r*r);
โปรแกรมที่ 1.8 จะเป็นการตรวจสอบลำดับการคำนวณของเครื่องหมายและตัวปฏิบัติการ
[Source code: TestPrecedence.cpp]

คำตอบ ในบรรทัดที่ 10 ไม่ตรงกับที่คาดคะเนไว้เพราะว่า เรากำหนดตัวแปร i, j, k เป็นชนิดจำนวนเต็ม เมื่อนำ j/k = 4/3 = 1 ส่วนที่เป็นทศนิยมจะถูกตัดทิ้งไป ทำให้ผลลัพธ์ในบรรทัดที่ 9 และ 10 ไม่เท่ากัน
กำหนดให้ x เป็นตัวแปรชนิดจำนวนเต็ม จงหาผลลัพธ์ของนิพจน์ต่อไปนี้
x=8*10-9%4*3+9
= 80 – (9%4)*3 + 9
= 80 – 2*3 + 9
= 80 – 6 + 9
= 83
x=(8*(10-9)%4)*3+9
= (8*1%4)*3+9
= (0)*3 + 9
= 9
x=(8+9)%5/2 = 17%5/2
= 2/2
= 1
x=-6*8/-5 = -48%-3
= 0
เราสามารถเขียนการกำหนดค่าทางคณิตศาสตร์ให้สั้นลงกว่าเดิมได้
ข้อความเต็ม
ข้อความย่อ
identifier = identifier operator expression;identifier operator=identifier;
y = y+1;y++; หรือ y +=1;
y = y-1;y--; หรือ y -=1;
z=z-2;z-=2;
d=d/4.5;d/=4.5;
r=r%3;r%=3;
ตัวอย่างอื่น ๆ
x=x+1;
z= x+y;
นิพจน์ทางคณิตศาสตร์ 2 บรรทัดนี้ เขียนให้รวบรัดอยู่ในบรรทัดเดียวกันได้ดังนี้
z= x++ +y;
การเขียนนิพจน์ x++ หรือ x— เช่นนี้เรียกว่าเขียนแบบต่อท้าย (postfix) หมายถึงค่า x ถูกนำไปใช้ในการคำนวณก่อนแล้วจึงมีการเพิ่มค่าหรือลดค่า
ถ้าเขียนแบบนำหน้า (prefix) ++x หรือ –x หมายถึงมีการเพิ่มค่าหรือลดค่าก่อน แล้วจึงนำค่า x ไปคำนวณ
ตัวอย่างการใช้ prefix
Int i=4; j=2;
i= i*j++; จะได้ i=8 และ j =3 นำ j ไปคูณกับ i ก่อน แล้วจึงเพิ่มค่า j
Int i=4; j=2;
i= i*++j; จะได้ i=12 และ j =3 เพิ่มค่า j ก่อน แล้วจึงนำ j ไปคูณกับ i
Int i=4; j=2;
i = i*j--; จะได้ i=8 j =2
Int i=4; j=2;
i= i*--j; จะได้ i=4 j =2
การรับข้อมูลทางแป้นพิมพ์ (Keyboard)
เมื่อต้องการกำหนดค่าตัวแปรใด โดยวิธีป้อนข้อมูลผ่านแป้นพิมพ์ ภาษา C++ มีคำสั่ง cin (console input – อ่านว่า ซี - อิน) รับข้อมูลจากแป้นพิมพ์ นำไปเก็บไว้ในตัวแปรที่ต้องการ รูปแบบคำสั่งทั่วไปมีดังนี้
cin >> ชื่อตัวแปร 1 >> ชื่อตัวแปร 2 >> …..;
เครื่องหมาย >> เรียกว่า input operator ระวังอย่าสับสนกับ << ของ cout
จากโปรแกรม 1.1 ถ้าต้องการรับค่าความกว้างและความยาวของสี่เหลี่ยมผืนผ้าทางแป้นพิมพ์ ใช้คำสั่ง cin โปรแกรมจะเปลี่ยนไปดังนี้
[Source code: FindArea2.cpp]
เมื่อให้โปรแกรมทำงาน โปรแกรมจะหยุดให้ป้อนค่า ความกว้าง ความยาว ให้เราป้อนตัวเลข 2 จำนวน แยกจากกันโดยใช้เว้นวรรค (เคาะแป้น spacebar)
Input width and length : 22.5 30.2 (กด enter)
เมื่อกด enter จะปรากฏผลลัพธ์บนจอภาพ

Area of rectangle = 679.5 sqr.meter.

แบบฝึกหัดที่ 1.2
1. จงตรวจสอบดูว่านิพจน์ต่อไปนี้ถูกต้องตามหลักของภาษา C++ หรือไม่ ถ้าถูกต้องให้หาผลลัพธ์
•  24/8*3; (เฉลย 9 )
•  24/8/3 ; (เฉลย 3 )
•  32%3*2 ; (เฉลย 4 )
•  6(8+4); (ไม่ถูกต้อง ต้องมีเครื่องหมาย * หลังเลข 6 )
•  18%5%2 (เฉลย 1 )
•  18%(5%2) (เฉลย 0 )
2. จงเขียนคำสั่งต่อไปนี้ให้จบในบรรทัดเดียว
ก.   price=price+1;
sum = sum + price;
(เฉลย sum += +price;)
ข. a= a-(b+c);
c = c+1;
(เฉลย a -= (b+c++); )

3. กำหนดให้ int x=2, y=3; ในแต่ละข้อ เมื่อโปรแกรมทำคำสั่งแต่ละบรรทัดจะได้ค่า x, y เท่าใด
•  y +=--x; (เฉลย x= 1, y=4 )
•  y *=x++; (เฉลย x= 3, y=6 )

4. กำหนดให้ int x=2, y = 4; ในแต่ละนิพจน์ค่า z ( ซึ่งเป็นตัวแปรชนิด int เช่นกัน) จะมีค่าเท่าใด
•  z = ++x*y; (เฉลย z = 12 )
•  z= x++*y; (เฉลย z = 8 )
5. จงเขียนนิพจน์คณิตศาสตร์ต่อไปนี้ให้อยู่ในรูปประโยคคำสั่งของภาษา C++
ก.   x 3 -2x 2 + 5x + 7
ข.  
ค.  ความเร่งของระบบมวล m 1 และ m 2 คล้องกับเชือกเบาและรอกไม่มีความฝืดมีค่าเป็น
  
จ. สมการสถานะแก๊สของแวน เดอร์ วาลส์ (Van der Waals) มีรูปสมการเป็น
RT = 
เมื่อ T คืออุณหภูมิสมบูรณ์
P คือความดันของแก๊ส
n คือจำนวนโมลของแก๊ส
a,b คือค่าคงที่
R คือค่าคงที่สากลของแก๊ส
V คือปริมาตรของแก๊ส
ฉ. ความเร็วของทรงกระบอกมวล m รัศมี r ที่กลิ้งลงมาถึงปลายพื้นเอียงสูง h หาได้จาก
V = 
เมื่อ I คือโมเมนต์ความเฉื่อยของทรงกระบอก

ุ5. จงเขียนโปรแกรมต่อไปนี้
•  ระยะทางระหว่างกรุงเทพฯ ถึงเชียงราย เท่ากับ 838 กิโลเมตร จงแปลงระยะทางนี้ให้เป็นไมล์ โดยที่ 1 ไมล์ เท่ากับ 1.6093440 กิโลเมตร
•  แปลงน้ำหนักนักมวย 110 ปอนด์ ให้เป็นกิโลกรัม 1 กิโลกรัม เท่ากับ 2.205 ปอนด์
•  แปลงอุณหภูมิ 30 องศาเซลเซียส ให้เป็นอุณหภูมิฟาเรนไฮต์ (Fahrenheit) โดยใช้สูตร
•  หาพื้นที่ของเซกเตอร์ของวงกลม ซึ่งมีมุมระหว่างรัศมี (d, degree) 30 องศา รัศมี (r) ยาว 2 เมตร พื้นที่ของเซกเตอร์คือ  ให้มุมที่วัดเป็นเรเดียน
•  จงหาปริมาตร (V, volume) และพื้นที่ผิว (A, Surface area) ของทรงกลมที่มีรัศมี 15 เซนติเมตร
ุ6. ถ้ากำหนดค่า unsigned int num = -1; การคอมไพล์จะเป็นอย่างไร
(เฉลย: คอมไพเลอร์จะเตือน ค่า -1 จะถูกตีความเป็นตัวเลขที่ไม่คิดเครื่องหมาย -1 = 0xff ในเลขฐานสิบหก หรือ 65535 ของเลขฐานสิบ )
7. ถ้ากำหนดค่า int number = 6.3;
(เฉลย: คอมไพเลอร์จะแจ้งเตือนเช่นเดียวกัน ตัวเลขที่เก็บไว้จะถูกตัดให้เหลือเฉพาะจำนวนเต็มคือ 6 )

8. ประโยคต่อไปนี้ใช้ comment ถูกหรือไม่
cout << “First try in C++ // my first time in C++”;
9. โปรแกรมต่อไปนี้คอมไพล์ผ่านหรือไม่
main() {
2000; // y2k year
return 0;
}
10. ในแต่ละข้อต่อไปนี้ เป็นการประกาศตัวแปรที่ผิดหรือไม่ ถ้าผิด แก้ไขให้ถูกต้อง
•  int old = 60; new =20;
•  int a = b= 5;
•  double float c;
11. โปรแกรมต่อไปนี้คอมไพล์ผ่านหรือไม่
main() {
c =35;
cout << c << endl;
}