28
บทที2 : พื้นฐานภาษา C++ 7 บทที2 พื้นฐานภาษา C++ ภาษา C++ (อานวา ซี -พลัส-พลัส) เปนลูกผสมระหวางภาษา Simula และภาษา C โดยรับเอา แนวคิดของภาษา C มากกวา 95% ประยุกตเขากับแนวคิดเชิงวัตถุของ Simula ทําใหภาษา C++ เปน ลูกผสมระหวาง Procedural Language และ Object Oriented Language เราไมสามารถบอกไดวา C++ เปน OOP100% โดยเราอาจเลือกเขียนแบบภาษา C ไดอีกแบบหนึ่ง ภาษา C++ เปนภาษาโปรแกรมภาษาหนึ่งที่ไดรับการพัฒนาขึ้นมาไมนานนักและเปนภาษาที่มี ความสามารถสูง ดังนั้น ในบทนี้จะเสนอความเปนมาของภาษา C++ รูปแบบการเขียนโปรแกรมขั้นตน เพื่อเรียนรูถึงองคประกอบตางๆ ที่จําเปนในการเขียนโปรแกรมดวยภาษา C++ เชน การเขียนคอมเมนต การประกาศตัวแปร ชนิดขอมูลที่ควรรู รวมทั้งขอสังเกตที่นาสนใจในภาษา C++ เชน ตัวดําเนินการ ตางๆ การจัดการกับการเกิดสวนลน (Overflow) เปนตน ความเปนมาของภาษา C++ C++ มีรากฐานมาจากภาษา C และเปนภาษาที่คลุมภาษา C ไว C++ ยังคงรักษาความสามารถ และความยืดหยุนของ C ในการเขียนโปรแกรมระบบต่ํา รวมทั้งโปรแกรมควบคุมฮารดแวร ที่สําคัญ กวานั้น คือ C++ ใหการสนับสนุนการเขียนโปรแกรมแบบ Object-Oriented C++จัดเปนภาษาที่มี ความสามารถมากกวา ADA และ Modula-2 ขณะที่ยังคงความมีประสิทธิภาพและความกะทัดรัดของ ภาษา C ไว ดังนั้น จึงเปนภาษาโปรแกรมภาษาหนึ่งที่ยอมใหโปรแกรมเมอรเขียนโปรแกรมแบบมี โครงสราง และเขียนโปรแกรมเชิงวัตถุไดอยางมีประสิทธิภาพ C++ เปนภาษาผสม (Hybrid Language) โดยอาจแกปญหาหนึ่งดวยวิธี Object-Oriented ลวนๆ หรืออาจแกปญหาดวยการใชภาษาแบบเกา ซึ่งมีโครงสรางบางอยางเพิ่มขึ้นจากภาษา C ในทางปฏิบัติ ในการแกปญหามักจะสะทอนใหเห็นวิธีการทั้ง 2 แบบ C++ ถูกพัฒนาโดย Bjane Stroustrup ทีBell Labs ในชวงทศวรรษ 1980 Dr.Stroustrup พัฒนา ภาษานี้ขึ้นเพื่อเขียนซอฟตแวรจําลองเหตุการณ (Event-Driven Simulation) ที่มีความซับซอน ซึ่งมี Rick Mascitti เปนผูตั้งชื่อของภาษานี้ใหกับเขา C++ ถูกออกแบบใหสงเสริมการพัฒนาซอฟตแวรขนาดใหญ โดยเพิ่มการตรวจสอบ Type เขา ไป เมื่อเปรียบเทียบกับ C แลวจะลดขอผิดพลาดลงไดมาก เพราะวาภาษา C ยอมใหโปรแกรมเมอร ควบคุมระบบในระดับต่ําไดโดยตรง โปรแกรมเมอรจํานวนมากจึงทํางานโดยเริ่มจากโครงสรางระดับ ต่ํา แลวนําสวนตางๆ เหลานี้มาประกอบกันเปนโครงสรางใหญ แตในภาษา C++ จะทําในทางตรงกัน ขาม คือ กําหนดโครงสรางใหญกอนนํามาสัมพันธกัน แลวจึงกําหนดโครงสรางยอยๆ ตอไป การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 7

บทท่ี 2 พื้นฐานภาษา C++

ภาษา C++ (อานวา ซี-พลัส-พลัส) เปนลูกผสมระหวางภาษา Simula และภาษา C โดยรับเอาแนวคิดของภาษา C มากกวา 95% ประยกุตเขากับแนวคิดเชิงวัตถุของ Simula ทําใหภาษา C++ เปนลูกผสมระหวาง Procedural Language และ Object Oriented Language เราไมสามารถบอกไดวา C++ เปน OOP100% โดยเราอาจเลือกเขียนแบบภาษา C ไดอีกแบบหนึ่ง ภาษา C++ เปนภาษาโปรแกรมภาษาหนึ่งท่ีไดรับการพฒันาข้ึนมาไมนานนักและเปนภาษาที่มีความสามารถสูง ดังน้ัน ในบทน้ีจะเสนอความเปนมาของภาษา C++ รูปแบบการเขียนโปรแกรมขั้นตน เพื่อเรียนรูถึงองคประกอบตางๆ ท่ีจําเปนในการเขียนโปรแกรมดวยภาษา C++ เชน การเขียนคอมเมนต การประกาศตัวแปร ชนดิขอมูลท่ีควรรู รวมท้ังขอสังเกตท่ีนาสนใจในภาษา C++ เชน ตัวดําเนินการตางๆ การจัดการกับการเกิดสวนลน (Overflow) เปนตน ความเปนมาของภาษา C++ C++ มีรากฐานมาจากภาษา C และเปนภาษาท่ีคลุมภาษา C ไว C++ ยังคงรักษาความสามารถและความยืดหยุนของ C ในการเขียนโปรแกรมระบบตํ่า รวมท้ังโปรแกรมควบคุมฮารดแวร ท่ีสําคัญกวานัน้ คือ C++ ใหการสนบัสนุนการเขียนโปรแกรมแบบ Object-Oriented C++จัดเปนภาษาท่ีมีความสามารถมากกวา ADA และ Modula-2 ขณะท่ียังคงความมีประสิทธิภาพและความกะทัดรัดของภาษา C ไว ดังนั้น จึงเปนภาษาโปรแกรมภาษาหน่ึงท่ียอมใหโปรแกรมเมอรเขียนโปรแกรมแบบมีโครงสราง และเขียนโปรแกรมเชิงวัตถุไดอยางมีประสิทธิภาพ C++ เปนภาษาผสม (Hybrid Language) โดยอาจแกปญหาหนึ่งดวยวิธี Object-Oriented ลวนๆ หรืออาจแกปญหาดวยการใชภาษาแบบเกา ซ่ึงมีโครงสรางบางอยางเพิม่ข้ึนจากภาษา C ในทางปฏิบัติในการแกปญหามักจะสะทอนใหเห็นวิธีการท้ัง 2 แบบ C++ ถูกพัฒนาโดย Bjane Stroustrup ท่ี Bell Labs ในชวงทศวรรษ 1980 Dr.Stroustrup พัฒนาภาษานี้ข้ึนเพื่อเขียนซอฟตแวรจําลองเหตุการณ (Event-Driven Simulation) ท่ีมีความซับซอน ซ่ึงมี Rick Mascitti เปนผูตั้งช่ือของภาษานี้ใหกับเขา C++ ถูกออกแบบใหสงเสริมการพัฒนาซอฟตแวรขนาดใหญ โดยเพิ่มการตรวจสอบ Type เขาไป เม่ือเปรียบเทียบกับ C แลวจะลดขอผิดพลาดลงไดมาก เพราะวาภาษา C ยอมใหโปรแกรมเมอรควบคุมระบบในระดับตํ่าไดโดยตรง โปรแกรมเมอรจํานวนมากจึงทํางานโดยเร่ิมจากโครงสรางระดับต่ํา แลวนําสวนตางๆ เหลานีม้าประกอบกนัเปนโครงสรางใหญ แตในภาษา C++ จะทําในทางตรงกันขาม คือ กําหนดโครงสรางใหญกอนนํามาสัมพันธกัน แลวจึงกําหนดโครงสรางยอยๆ ตอไป

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 2: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 8

รูปแบบการเขยีนโปรแกรม C++ ภาษาโปรแกรม C++ เปนภาษาโปรแกรมท่ีไมมีรูปการเขียนตายตัว กลาวคือ ไมตองกําหนดวาองคประกอบของโปรแกรมจะตองเขียนอยูในบรรทัดหรือบนหนากระดาษสวนไหน ดังนั้น โปรแกรมเมอรจึงมีอิสระท่ีจะวางรูปแบบของโปรแกรม แตโปรแกรมเมอรท่ีมีประสบการณยอมทราบดีวาการเขียนโปรแกรมรูปแบบท่ีดีนั้นจะตองอานงาย สะดวกตอการแกไขขอผิดพลาดของโปรแกรม และงายตอการดูแลรักษาโปรแกรม แตอยางไรก็ตาม เราสามารถเขียนตามระเบียบแบบแผนมาตรฐานของภาษา C++ ซ่ึงมีขอปฏิบัติงายๆ ดังตอไปน้ี 1.การเขียนประโยคตัวเตรียมประมวลผล #include ไวท่ีตําแหนงเร่ิมตนของโปรแกรม 2.เขียนบรรทดัละหนึ่งคําส่ัง 3.เขียนกลุมคําส่ังท่ีอยูภายในบล็อกแบบยอหนา 4.ใหมีการเวนวรรคตรงเคร่ืองหมายตัวดําเนินการท้ังกอนและหลังเคร่ืองหมาย เชน n = 4 ระเบียบแบบแผนอีกลักษณะหน่ึงท่ีพึงปฏิบัติ คือ การเขียนช่ือตัวแปร ถาเขียนดวยช่ือส้ันๆ จะลดโอกาสท่ีจะพิมพผิด แตในขณะเดียวกนัก็ควรจะเปนช่ือท่ีส่ือความหมายวาตัวแปรนั้นแทนอะไร การเขียนรูปแบบนี้ เรียกวา รหสัคําส่ังเอกสารในตัวเอง (Self-Documenting Code) โปรแกรมเมอร C++ เกือบท้ังหมดนิยมเขียนช่ือตัวแปรดวยพิมพเล็ก ยกเวนในกรณีท่ีช่ือตวัแปรประกอบดวยคําหลายๆ คําจะเขียนตัวอักษรตัวแรกของคําท่ีมาตอทายดวยตัวพมิพใหญ เชน Char Middle Initial; Unsigned Max Unsigned Int; เหตุผลท่ีเขียนแบบนี้ เพราะจะทําใหอานงายกวาเขียนดวยตัวพมิพเล็กเพียงอยางเดียว เชน Middleinitial และ Maxunsignedint หรือมีอีกวิธีหนึ่งท่ีนยิมใหเชนกนั คือ การใชเคร่ืองหมาย สัญประกาศ (underscore ‘_’) เปนตัวแยกคําแทนชองวาง เชน Char middle_initial; Unsigned Max Unsigned Int;

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 3: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 9

โปรแกรมภาษา C++ อยางงาย ตัวอยางแรกจะแสดงสวนประกอบหลักของโปรแกรม C++ ตัวอยางท่ี 2-1 โปรแกรม Hello World

บรรทัดแรกของโปรแกรมเปนการกําหนดตัวเตรียมประมวลผล (Preprocessor Dircctive) ดวยคําวา #include เพื่อแสดงวาโปรแกรมนี้มีการนําขอมูลออกหรือมีการแสดงผลออกทางอุปกรณตวัใดตัวหนึ่ง โดยการอางถึงไฟลช่ือ iostream.h ซ่ึงเปนโปรแกรมท่ีทําหนาท่ีจดัการกับกลุมสารสนเทศท่ีตองการสงใหหนวยควบคุมการนําขอมูลออก คือ ตัววตัถุ cout สําหรับเคร่ืองหมายวงเล็บมุม “<” และ “>” ไมนับเปนสวนของชื่อไฟล แตใชเพือ่แสดงถึงมาตรฐานของการกลาวถึงคลังโปรแกรม หรือไลบรารีไฟล (Library File) เทานั้น ดังนัน้ จึงสรุปไดวาเม่ือใดท่ีโปรแกรมตองการใชวัตถุ cout เพือ่สงขอมูลออกทางอุปกรณแสดงผลจะตองมีการกําหนดตัวเตรียมประมวลผลและไฟล istream.h ไวดวย บรรทัดที่ 2 คือ หมายเหตุโปรแกรมหรือท่ีเรียกกนัโดยท่ัวไปวาคอมเมนต (Comment) เขียนนําดวยสัญลักษณ // และตามดวยขอความ หมายเหตุโปรแกรม คือ ขอความท่ีใชอธิบายการทํางานของโปรแกรมนอกเหนือจากคําส่ังของโปรแกรม จุดประสงคของหมายเหตุโปรแกรมมีไวสําหรับใหอานเทานั้น ไมมีผลกระทบใดๆ ตอการทํางานของโปรแกรม บรรรทัดท่ี 3 คือ การกําหนดฟงกชัน main() ซ่ึงเปนฟงกชันหลักสําหรับทุกโปรแกรมที่เขียนดวยภาษา C++ เปนส่ิงท่ีบงบอกจุดเร่ิมตนการปฏิบัติงานของโปรแกรม สวนของวงเล็บ “0” ท่ีอยูหลังคํา Main เปนสัญลักษณขอกําหนดของภาษาท่ีตองเขียนรวมอยูดวย บรรทัดที่ 4 และ 7 มีเพียงเคร่ืองหมายวงเล็บปกกาเปด “{“ และวงเล็บปกกาปด “}” ตามลําดับ ซ่ึงเปนเคร่ืองหมายแสดงถึงรายการคําส่ังตางๆ ของฟงกชัน main () และเปนสวนท่ีตัองมีในทุกโปรแกรมท่ีเขียนข้ึนดวยภาษา C++ บรรทัดที่ 5 มีประโยคคําส่ัง ดังน้ี Cout<< “hello,world.\n”;

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 4: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 10

ประโยคนี้บอกใหระบบคอมพิวเตอรสงขอความ “hello world.\n” ไปท่ีสวนควบคุมการนําขอมูลออก cout (ซี-เอาต) วตัถุตัวนี้ คือ กระแสสงออกมาตรฐาน โดยทั่วไปจะหมายถึงจอภาพ วตัถุ cout มาจากคําเต็มวา Console Output คือ จอเฝาคุมแสดงผล ผลลัพธท่ีไดจากการส่ังRun โปรแกรมในตัวอยางท่ี 2-1 คือ

สัญลักษณ \n หมายถึงการข้ึนบรรทัดใหม ประกอบดวยตัวอักขระสองตัว ไดแก เคร่ืองหมาย ‘\’ และตัวอักษร ‘n’ การใสสัญลัษณนี้ตอทายท่ีขอความภายในเคร่ืองหมายอัญประกาศเปนการบอกใหระบบคอมพิวเตอรข้ึนบรรทัดใหม หลังจากพิมพตวัอักขระหรือขอความท่ีอยูหนาเคร่ืองหมายนี้ หรืออีกนัยหนึ่งก็คือ เปนเคร่ืองหมายแสดงจดุส้ินสุดรายการขอมูลของบรรทัดนั้นนัน่เอง บรรทัดที่ 6 ประกอบดวยคําส่ัง return 0 หมายถึง ส้ินสุดปฏิบัติการคําส่ังของโปรแกรมและส่ังการควบคุมการทํางานกลับไปท่ีระบบปฏิบัติการ สวนเลข 0 ใชเปนสัญญาณแสดงการจบโปรแกรมเม่ือไมมีขอผิดพลาดใดๆ เกดิข้ึน ประโยคคําส่ังแสดงผลลัพธท่ีบรรทัดที่ 5 มีการใชสัญลักษณหลายตัว หนึ่งในจํานวนนน้ัน คือ สัญลักษณ ‘<<’ เราเรียกสัญลักษณนีว้า ตวัดําเนินการสงออก (Output Operator) หรือตัวดําเนินการแทรก (Insertion Operation) กลาวคือ เปนการแทรกขอมูลเขาไปท่ีกระแสสงออก สวนสัญลักษณ \n ท่ีอยูปดทายขอความ คือ ตัวอักขระควบคุมการทํางานใหระบบคอมพิวเตอรข้ึนบรรทัดใหม เม่ือไรก็ตามท่ีมีเคร่ืองหมายนี้ปรากฏอยูท่ีขอความสงออกจะสงผลใหบรรทัดของคําส่ังแสดงผลลัพธในขณะนั้นส้ินสุดลง และไปเร่ิมตนท่ีบรรทัดใหม ขอสังเกตของสัญลักษณท้ังสอง คือ การใชตัวอักขระสองตัวติดกันโดยไมมีชองวางระหวางตัวอักขระนั้น ประโยคคําส่ังในการโปรแกรมภาษา C++ ทุดคําส่ังจะตองปดทายดวยเคร่ืองหมาย ‘;’ เรียกเคร่ืองหมายนีว้า เคร่ืองหมายอัฒภาคหรือเคร่ืองหมายเซมิโคลอน และในหนึ่งบรรทัดอาจมีไดหลายคําส่ัง หรือในทางตรงกันขามอาจมีบางคําส่ังท่ีตองเขียนมากกวาหนึ่งบรรทัด แตไมวากรณีใดก็ตามทุกคําส่ังจะตองจบลงดวยเคร่ืองหมายอัฒภาค (;)

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 5: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 11

การสงขอมูลออกดวย cout ถึงแมวาจะยังไมไดอธิบายรายละเอียดเก่ียวกับวัตถุ cout ก็ตาม แตเรากไ็ดทดลองใช cout ดูแลว ซ่ึงก็แสดงใหเห็นวาวัตถุมีจดุเดนท่ีสามารถใชงานวัตถุไดโดยไมจําเปนตองรูรายละเอียดภายในของวัตถุเลย เพียงรูวิธีการเช่ือมตอ (Interface) ก็พอ วัตถุ cout มีวิธีการเช่ือมตอแบบงายๆ Cout<< สวนท่ีตองการสงออก สวนท่ีอยูทางดานขวามอื จะถูกใสเขาไปในสายกระแส (Stream) cout ดวยปฏิบัติการของเคร่ืองหมาย Insertion Operator (<<) ของวัตถุ cout

รูปท่ี 2-1 แสดงความสัมพันธของวัตถุ cout กับโปรแกรมและจอภาพ วัตถุ cout ทําหนาท่ีเหมือนกระแสหรือสายนําสงขอมูลจากโปรแกรมไปปรากฏท่ีจอภาพ (เคร่ืองพิมพหรืออุปกรณแสดงผลอ่ืนๆ) ทีละตัวอักษรตามลําดับ Cout สามารถทํางานไดท้ังกบัขอความ(String) และจํานวนเต็ม ซ่ึงเปนความฉลาดของวัตถุ cout อันเปนผลมาจากคุณลักษณะของ OOP ในภาษา C++ สาระสําคัญ ก็คือ ตัวดําเนินการใส (Insertion Operator, <<) สามารถปรับเปล่ียนพฤติกรรมไดตามสภาพแวดลอม สภาพแวดลอมในท่ีนี้ หมายถึง ชนิดขอมูลของตัวถูกดําเนินการ ตัวอยางท่ี 2-1 ไมใชโปรแกรมท่ีมีขนาดเล็กท่ีสุด การเขียนโปรแกรมภาษา C++ อาจไมตองมีคําส่ังใดๆ ในโปรแกรมเลยก็สามารถเปนโปรแกรมได เพียงแตขอใหมีสวนประกอบหลักของโปรแกรมเทานั้น โปรแกรมที่มีลักษณะดังกลาว เรียกวา โปรแกรมวาง (Empty Program) ซ่ึงไมไดมีวัตถุประสงคใหโปรแกรมทําอะไร การใช cin ลองมาดูตัวอยางเพิ่มเติม โดยโปรแกรมจะถามผูใชใหปอนคาเขาเคร่ืองในขณะ Run โปรแกรม การทํางานนี้ทําไดโดยใช cin (อานวา ซี-อิน) อานขอมูลเขา ตัวอยางท่ี 2-2 ใหมีการปอนเลขท่ีชอบและโปรแกรมจะแสดงขอความตอบกลับมา

#include<iostream.h> main() { cout << “Hello,World.\n”; }

Hello,world.

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 6: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 12

จากโปรแกรมจะเห็นวา คาท่ีพิมพเขาไปทางแปนพิมพ (13) จะถูดใหคาแกตวัแปร num คําส่ังท่ีอยูเบ้ืองหลังปฏิบัติการนี้ คือ Cin >> num; สําหรับขอมูลนําเขา cin ใชเคร่ืองหมายดําเนินการ >> ทําหนาท่ีดึง (Extract) ขอมูลจากสายกระแสนําเขา โดยปกติจะวางตัวแปรไวทางขวาของเคร่ืองหมาย >> เพือ่รอรับขอมูลท่ีดึงออกมา ตัวอยางท่ี 2-3 โปรแกรม C++ ท่ีส้ันที่สุด

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 7: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 13

ในโปรแกรมนี้เรียกไดวาเปนโปรแกรมวาง หมายถึง โปรแกรมท่ีไมไดทําการประมวลผลคําส่ังใดๆ ท้ังส้ิน เปนเพียงแสดงใหเห็นโครงรางของโปรแกรม C++ ท่ีทุกโปรแกรมจะตองมีเทานั้น คําส่ัง Return 0; อาจไมจําเปนตองใชกับคอมไพเลอรสวนใหญ คอมไพเลอรบางตัวจะแจงขอความเตือนถาไมมีการระบุไว แตในบทนี้จะมีการเขียนไวทุกโปรแกรม อยางไรกต็ามควรมีการเขียนหมายเหตุโปรแกรมประกอบทุกโปรแกรม เพื่ออธิบายใหผูอานทราบพอสังเขปวาโปรแกรมนั้นทําอะไร การเขียนคอมเมนต (Comment) คอมเมนตหรือหมายเหตุโปรแกรม หมายถึง ขอความท่ีเขียนอธิบายไวรวมกับตัวโปรแกรม แตคอมพิวเตอรจะไมนําขอความน้ันมาปฎิบัตติาม เนื่องจากมีไวเพื่อใหผูใชโปรแกรมไดอาน ซ่ึงจะชวยใหสามารถทําความเขาใจการทํางานของโปรแกรมไดงายข้ึน และยังเปนประโยชนตอการบํารุงรักษาโปรแกรมตอไป เราเรียกหมายเหตุโปรแกรมวา คอมเมนต การเขียนหมายเหตุโปรแกรมในภาษา C++ เขียนได 2 รูปแบบ คือ การเขียนแบบมาตรฐานภาษา C จะเร่ิมตนสวนของคอมเมนตดวยเคร่ืองหมาย /* และจบดวยเคร่ืองหมาย */ ขอความท่ีเขียนอยูระหวางเคร่ืองหมายท้ังสอง คือ หมายเหตโุปรแกรม ซ่ึงคอมพิวเตอรจะไมสนใจแปลขอความดังกลาว ดังนั้น จะไมมีการตรวจสอบไวยากรณของภาษาท่ีจดุนี ้ ตัวอยางการเขียนหมายเหตุโปรแกรมแบบมาตรฐานภาษา C /* this is a C style comment */ การเขียนหมายเหตุโปรแกรมรูปแบบท่ีสอง คือ การเขียนแบบมาตรฐานภาษา C++ ซ่ึงเร่ิมตนดวยเคร่ืองหมาย // และตามดวยขอความท่ีจะใชเปนเคร่ืองหมายเหตุโปรแกรม ตัวอยางการเขียนโปรแกรมหมายเหตุโปรแกรมแบบมาตรฐานภาษา C // this is a C++ style comment

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 8: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 14

โปรแกรมเมอรสวนใหญนยิมใชรูปแบบท่ีสองเพราะเขียนงายและสังเกตเห็นไดงายในสวนของโปรแกรม แตอยางไรก็ด ีการเขียนหมายเหตุโปรแกรมแบบมาตรฐานภาษา C ก็มีความจําเปน ถาโปรแกรมเมอรตองการใสสวนของหมายเหตุไวในประโยคคําส่ัง แตไมแนะนําใหถือปฎิบัติเชนนี ้ เคร่ืองหมายจบประโยคคําส่ัง ภาษา C++ ใชเคร่ืองหมายอัฒภาคหรือเซมิโคลอน (;) แสดงจุดส้ินสุดของประโยคคําส่ังนั่นคือ ประโยคคําส่ังทุกประโยคตองจบลงดวยเคร่ืองหมายอัฒภาค (;) ซ่ึงจะแตกตางจากภาษาโปรแกรมภาษาอ่ืน เชน ภาษาปาสคาล โดยท่ีภาษาปาสคาลใชเคร่ืองหมายอัฒภาคเปนตัวค่ันระหวางคําส่ัง แตสําหรับประโยคท่ีข้ึนตนดวยสัญลักษณจํานวนหรือแฮช (#) เชน #include<iostream.h> จะไมจบดวยเคร่ืองหมายอัฒภาค เพราะประโยคนี้ไมใชประโยคคําส่ังแตเปนประโยคท่ีกําหนดตัวเตรียมประมวลผล จากตัวอยางท่ีผานมาจะเห็นวาประโยค C++ สามารถทําการแปลเปนนิพจน หรือในทางกลับกนันิพจนก็สามารถเปนประโยคในภาษา C++ ไดดวย นพิจนสามารถกําหนดใหเปนประโยคเดีย่วๆ เชน ตัวอยางสองประโยคตอไปนี้ถือวาเปนประโยค C++ ท่ีถูกตอง x + y; 22; ประโยคท้ังสองนี้ไมมีผลอะไรตอโปรแกรม ดังนั้น จึงถือไดวาเปนประโยคท่ีสูญเปลา แตอยางไรก็ดี ถือวาเปนประโยคท่ีถูกตองตามหลักภาษา C++ เราจะดูนิพจนท่ีเปนประโยชนตอไปภายหลัง เคร่ืองหมายอัฒภาคเปรียบเหมือนตัวดําเนนิการบนนพิจน ซ่ึงเปล่ียนนพิจนไปเปนประโยคคําส่ัง เคร่ืองหมายนี้ไมใชตัวดําเนินการท่ีถูกตองเพราะผลลัพธ คือ ประโยคคําส่ังไมใชคาขอมูล แตก็เปนจุดท่ีชวยอธิบายใหเห็นความแตกตางระหวางนิพจนและประโยคคําส่ัง คําสงวนและการกําหนดชื่อ (Reserved Words & Identifier) ในภาษาโปรแกรมหน่ึงๆ ตัวโปรแกรมมักจะมีองคประกอบจากการสรางประโยคตามกฎไวยากรณของภาษาสําหรับสมาชิกตัวหนึ่ง โดยจะเรียกสมาชิกเหลานี้วา โทเค็น (Tokens) โทเค็นเหลานี้รวมถึงช่ือตัวแปร คาคงท่ี คําหลัก ตัวดําเนินการ และเคร่ืองหมายวรรคตอน ตัวอยางท่ี 2-4 โปรแกรมการแสดงสมาชิกโทเคน

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 9: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 15

ตัวอยางโปรแกรมนี้แสดงใหเห็นจํานวนโทเค็น 15 ตัว ไดแก main,(,),{,int,n,55,;,cout,<<,endl,return,0 และ } โดยท่ีโทเค็น n คือ ตัวแปร,โทเค็น 55,0,และ endl คือคาคงท่ีสําหรับโทเค็น int และ return คือ คําหลัก โทเค็น = และ << คือ ตัวดําเนินการ สวนโทเค็น (,),{,; และ } คือ เคร่ืองหมายวรรคตอน สําหรับสองบรรทัดแรกเปนการกําหนดตวัช้ีทาง (Directive) และหมายเหตุโปรแกรม ซ่ึงไมถือวาเปนสวนประกอบท่ีแทจริงของโปรแกรม คําสงวน (Reserved Words) เปนคําสงวนไวเฉพาะตัวภาษาโปรแกรม C++ เทานั้น ไมสามารถนําไปต้ังช่ือใหกับตัวแปร หรือนําไปใชเพื่อวัตถุประสงคอ่ืนได การกําหนดช่ือ (Identifier) คือ สายอักขระท่ีประกอบดวยตัวอักษรเลข (Alphanumeric) ท่ีมีตัวอักขระตัวแรกเปนตัวอักษร ถาจัดกลุมของตัวอักขระจะไดวา มีจํานวนตัวอักขระท่ีเปนตัวอักษรท้ังหมด 53 ตัว แบงเปนตัวอักษรภาษาอังกฤษจํานวน 52 ตวั และเคร่ืองหมายสัญประกาศ (_) รวมเปน 53 ตัว กลุมท่ีสอง คือ ตัวอักษรเลขมีจํานวน 63 ตวั ไดแกกลุมของตัวอักษร 53 ตัว รวมกบักลุมของตัวเลขอีก 10 ตัว (0,1,2,3,…,9) ดังนั้น main(),int,n,cout และ endl จึงมีลักษณะเปนตัวระบุได เชนเดียวกับคําตอไปนี้ stack x1 y4 LastName และ the_day_after_tomorrow เปนตน ภาษา C++ จะตรวจสอบตัวอักษรท่ีเปนตัวพิมพใหญกับตัวพิมพเล็ก ดังนั้นตัวระบุท่ีตั้งช่ือเหมือนกันแตพิมพดวยตัวอักษรท่ีตางกันโปรแกรม C++ จะมองตัวระบุท้ังสองเปนคนละตัวกัน เชน ระบุช่ือ stack กับ stack จะหมายถึง

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 10: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

16

ตัวระบุใหสําหรับการต้ังช่ือใหกับส่ิงตางๆ ในโปรแกรม เชน ช่ือตัวแปร และช่ือฟงกชันเปนตน จากตัวอยางขางตน main เปนช่ือของฟงกชัน int เปนช่ือของแบบชนิดขอมูล n และ cout เปนช่ือของตัวแปร สวน endl เปนช่ือคาคงท่ี ตวัระบุบางตัว เชน int ถือเปนคําสงวนเพราะเปนสวนของภาษาโปรแกรม สวนตัวระบุอ่ืนๆ เชน n ถูกกําหนดโดยตัวโปรแกรม ชนิดของขอมูล

รูปท่ี 2-2 แสดงชนิดของขอมูลในภาษา C++ บางสวน จํานวนเต็ม คือ ตัวเลขท้ังหมดไดแก 0,1,-1,2,-2,3,-3 เปนตน สําหรับจาํนวนเต็มชนิด unsigned integet คือ จํานวนเต็มท่ีไมใชลบ เชน 0,1,2,3, ฯลฯ ภาษา C++ จําแนกจํานวนเต็มออกเปน 9 ชนดิ ไดแก Char short int unsigned short int Signed char int unsigned int Unsigned char long int unsigned long int ความแตกตางของจํานวนเต็มท้ัง 9 ชนิดนี้ คือ พิสัยของจํานวนเต็มซ่ึงข้ึนกับระบบเคร่ืองคอมพิวเตอรท่ีนํามาใชงาน เชน บนระบบคอมพิวเตอรพซีีท่ีใชระบบปฎิบัติการ DOS พิสัยของจํานวนเต็มชนิด int มีคาอยูระหวาง-32768 และ 32768 ในขณะท่ีบนระบบปฎิบัติการ UNIX ซ่ึงทํางานบนเคร่ืองเวิรกสเตช่ันจะมีพิสัยอยูระหวาง -2147483648 และ 2147483647 คําวา int สามารถละไดตอนท่ีกําหนดแบบชนิดขอมูลดังตอไปนี้ short,int,long,unsigned short int,unsigned int และ unsigned long int

Arit.hmetic

IntegralFloating

Float double Long d bl

Enumeration unsigned signed

int short long char char short int long

Page 11: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 17

ตัวอยางโปรแกรมท่ี 2-5 นี้ จะแสดงพิสัยของจํานวนเต็มชนิดตางๆ ตามขอจํากัดของระบบคอมพิวเตอรท่ีใชอยู สําหรับคาคงท่ี SCHAR_MIN,LONG_MAX ฯลฯ เปนคาคงท่ีของขีดจํากัดตํ่าสุดและสูงสุดซ่ึงไดเก็บอยูในตวัช้ีทางไฟลท่ีช่ือ <limits.h> ดังนั้น ตอนเร่ิมตนโปรแกรมจึงตองมีการกําหนดประโยคตัวเตรียมประมวลผลดังนี ้ #include<limits.h> ตัวอยางท่ี 2-5 พิสัยของเลขจํานวนเต็ม โปรแกรมนี้จะพิมพขอบเขตขอมูลจํานวนเต็มแตละชนิด

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 12: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 18

ผลลัพธท่ีเกิดขึ้นนี้ไดจากระบบ UNIX บนเคร่ืองเวิรกสเตช่ัน ซ่ึงถาพิจารณาใหดีจะเห็นวา มีขอมูลท่ีแตกตางกันเพยีง 6 ชนิดเทานัน้ ดังนี้ Char ชวงพิสัย -128 ถึง 127 (1 ไบต) short ชวงพิสัย -32768 ถึง 32767 (2ไบต) int ชวงพิสัย -2147483648 ถึง 2147483647 (4 ไบต) unsigned char ชวงพิสัย 0 ถึง 255 (1 ไบต)

ชวงพิสัย 0 ถึง 65535 (2 ไบต) unsigned short unsigned ชวงพิสัย 0 ถึง 4294967295 (4 ไบต) จํานวนเต็มชนดิ short ใชเนื้อท่ี 2 ไบต (จํานวน 16 บิต) เนือ่งจากมีขอมูลอยูในชวงพิสัย -32768 ถึง 32767 ซ่ึงมีจํานวนขอมูลเทากับ 65536 = 216 ตัว ( 1 ไบตมีขนาด 8 บิต) บนระบบโปรแกรม Borland C++ ใหพิสัยคาเทากัน ยกเวนชนดิ int และ unsigned ซ่ึงมีคาดังนี้ Int ชวงพิสัย -32768 ถึง 32767 (2ไบต) Unsigned ชวงพิสัย 0 ถึง 65535 (2 ไบต) Char ในภาษา C++ ขอมูลชนิด char เปนขอมูลจํานวนเต็มชนิดหนึ่ง หมายความวา ตัวแปรใด ๆ ก็ตามท่ีถูกกําหนดใหเปนชนิด char สามารถนํามาใชในประโยคนิพจนจํานวนเต็มไดเชนเดยีวกับขอมูลจํานวนเต็มชนดิอ่ืน ดังตัวอยางการใชงานตอไปนี ้ Char C = 54; Char d = 2*C-7; C+ = d%3;

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 13: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 19

คําวา char เปนคํายอของคําวา character การใช char เม่ือตัวแปรชนดินีถู้กใชเปนขอมูลรับเขาหรือขอมูลสงออกจะทําการแปลงเปนตัวอักขระ เม่ือใดก็ตามท่ีตัวอักขระถูกใชเปนขอมูลรับเขา ระบบคอมพิวเตอรจะจัดเก็บรหัสแอสกี (ASCII) ไวเปนจํานวนเต็ม และเม่ือใดก็ตามท่ี ตวัแปรชนิด char ถูกสงเปนขอมูลสงออก ระบบจะสงตัวอักขระท่ีมีรหัสแอสกีตามน้ันไปยงัสวนของกระแสสงออก ดังแสดงในตัวอยางขางลางนี้ ภาษา C++ ไดนิยามขอมูลจํานวนเต็มขนาด 8 บิต ไว 3 ชนิด คือ char,signed char และ unsigned char แตมีเพยีง 2 ชนิดเทานัน้ท่ีแตกตางกัน คือ ชนิด char จะเปน signed char หรือ unsigned char ข้ึนอยูกับคอมพิวเตอรจะใชชนดิ char สําหรับตัวอักขระธรรมดา และใช unsigned char สําหรับขอมูลสายอักขระท่ีมีขนาดส้ันมากๆ สวนชนิด signed char ไมมีปรากฏใหเห็นบอยนัก ขอมูลชนดิท่ีกลาวมานี้เหมาะสําหรับจัดเก็บขอมูลท่ีมีคานอยๆ แตมีเปนจํานวนมาก และไมตองการสงผลลัพธโดยผานทางตัวดําเนินการสงออก << ตัวอยางท่ี 2-6 แสดงผลลัพธแบบตัวอักขระ ตัวอยางนี้แสดงใหเห็นวาตัวแปร char ใหผลลัพธอยางไร

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 14: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 20

คําส่ังแสดงผลลัพธคําส่ังแรกจะสงตัวแปร c ไปยังกระแสสงออก เนื่องจากขอมูลดังกลาว มีคาเทากับ 64 ผลลัพธท่ีเกิดขึ้น คือ ตัวอักขระ “@” (ตัวอักขระ “@” มีรหัสแอสกีเทากับ 64 ) ตอจากนัน้ c จะไดรับการเพิ่มคาเปน 65 ซ่ึงสงผลใหผลลัพธตัวถัดไปคือ ตัวอักขระ “A”( ตัวอักขระ “A” มีรหัสแอสกีเทากับ 65 ) สวนท่ีเหลือของโปรแกรมจะดําเนินการตอไปนี้ในลักษณะเดิม ( ถาระบบคอมพิวเตอรท่ีใชงานอยูเปนรหัส EBCDIC ผลลัพธท่ีไดจะแตกตางออกไป) ตัวอยางท่ี 2-7 แสดงรหัสแอสกี

เม่ือโปรแกรมนี้ไดรับการประมวลผล จะทําใหตวัแปร c มีคาเปน 65,66 และ 67 ตามลําดับ แตเนื่องจากตัวแปรอักขระไดพิมพออกมาเปนตัวอักขระ ดังนั้น ผลลัพธท่ีเกิดขึ้นในแตละบรรทัด คือ ตัว

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 15: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 21

นิพจน int ( c) ซ่ึงเรียกวา (Cast) มีหนาท่ีแปลงขอมูลตัวอักขระเปนจํานวนเต็ม ซ่ึงทําใหสามารถพิมพรหัสแอสกีของตัวอักษรได สัญลักษณ “Hello,” ซ่ึงเรียกวาสายอักขระ (String) ประกอบดวยลําดบัของตัวอักขระท่ีอยูภายในเคร่ืองหมายอัญประกาศ (“”) สายอักขระ (String) หรือเรียกกันโดยท่ัวไปวา สตริงค คือ ลําดับของตัวอักขระท่ีอยูตอเนื่องกันในหนวยความจําและส้ินสุดลงท่ีตัวอักขระ Null คือ ‘\0’ ขอมูลสายอักขระถูกเขาถึงดวยตัวแปรชนิด char* (ตัวช้ีช้ีไปท่ี char ) เชน ถา s เปนชนิด char* แลวประโยคคําส่ัง cout<< s<<endl; จะพิมพตัวอักขระท้ังหมดท่ีเก็บอยูในหนวยความจําโดยเร่ิมตนท่ีเลขท่ีอยู s และจบลงทันทีท่ีพบกับตัวอักขระ Null ตัวอักขระ (Character) หมายถึง สัญลักษณท่ีใชในภาษาตางๆ ซ่ึงมีท้ังสัญลักษณในรูปตัวอักษร ตัวเลข และสัญลักษณอ่ืนๆ ไดแก A-Z,0-9 และเคร่ืองหมายตางๆ ท่ีคอมพิวเตอรสามารถอานเขาใจความหมายและนําไปเก็บไวในหนวยความจําได (ชองวางก็นับเปน “ตัวอักขระ” ดวย) เคร่ืองคอมพิวเตอรสวนใหญท่ีใชกนัอยูจะใชชุดตัวอักขระรหัสแอสกี (ASCII มาจากคําเต็มวา American Standard Code for Information Interchange) ชุดอักขระนี้รวมท้ังตัวอักษรตัวเล็กและตัวใหญจํานวน 52 ตัว ตัวเลขจํานวน 10 ตวั เคร่ืองหมายวรรคตอนท่ีพบเหน็บนแปนพิมพและตัวอักขระท่ีไมใชในงานพิมพ แตใชสําหรับควบคุมการทํางานของโปรแกรม ตัวอยางตัวอักษรท่ีไมนํามาใชในงานพิมพ เชน ‘\n’ กําหนดข้ึนดวยเคร่ืองหมายตัวอักขระทับหลัง (\) และตัวอักขระ n นอกจากนี้ ยังมีตวัอักขระในลักษณะเชนนี้อีกมาก เชน ‘\t’ หมายถึง การตัง้ระยะ และตัวอักขระเตรียมพรอม คือ ‘\a’ หมายถึง เม่ือมีการพิมพจะมีเสียงปบ (Beep) เกิดขึน้ นอกจากนี้ ถาตองการพิมพตัวอักขระท่ีมีสัญลักษณตรงกับตัวท่ีใชในการควบคุมการทํางานของโปรแกรม เชน ตองการพิมพเคร่ืองหมายอัญประกาศกส็ามารถทําไดโดยการพิมพ \” หรือถาตองการพิมพเคร่ืองหมาย \ ก็สามารถพิมพไดโดยการพิมพ \\ ตัวอักขระสามารถนํามาใชเปนสวนของสายอักขระในคําส่ังโปรแกรม หรือเปนขอมูลตัวเดียวโดดๆ ก็ได ถาเม่ืออยูในลักษณะของขอมูลตัวเดยีวโดด ๆ จะหมายถึง คาคงท่ีอักขระ และ จะตองอยูภายในเคร่ืองหมายอัญประกาศเดีย่ว (‘’) โปรแกรมท่ี 2-8 ตัวอยางโปรแกรม Hello World อีกรูปแบบหนึ่ง

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 16: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 22

ประโยคคําส่ังในโปรแกรมน้ีจะทําหนาท่ีสงวัตถุตางๆ ไปยัง cout จํานวน 7 ชุด ไดแก สายอักขระ 2 ชุด คือ “Hello,” และ “Id” กับคาคงท่ีอักขระ 5 ตัว คือ ‘W’, ‘o’, ‘r’, ‘.’ และ ‘\n’ อยางไรก็ตาม ตัวอักษรโดดๆ สามารถนํามาประกอบกนัเปนสายอักขระได ดังนั้น จากประโยคคําส่ังขางตนอาจเขียนแทนดวย cout << “Hello,” << ‘W’ << ‘o’ << ‘r’ << “ld” << ‘.’ << ‘\n’; ประโยคนี้จะสงสายอักขระจํานวน 7 ชุด ไปยัง cout ซ่ึงทําใหไดผลลัพธเหมือนกนั แตการใชเปนคาคงท่ีอักขระจําดีกวา เนื่องจากการจดัเก็บขอมูลสายอักขระจะส้ินเปลืองมากกวา นอกจากนี้ยังมีสายอักขระแบบพิเศษ กลาวคือ ไมมีตัวอักขระใดๆ ปรากฎอยูในเคร่ืองหมายอัญประกาศ และเขียนแสดงดวย “” เรียกวาสายอักขระวาง (Empty String) ซ่ึงสามารถพิมพขอความดวยการนําสายอักขระวางมาใชประกอบดวยได เชน cout << “Hello,Wo” << “” << “rl” << “” << “” << “d.\n”; ความยาวของสายอักขระ คือ จํานวนของตัวอักขระท่ีประกอบกันเปนขอความนั้น เชน “ABCDE” จะมีความยาวเทากับ 5

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 17: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 23

C++ ไดจัดเตรียมฟงกชัน strlen () ไวสําหรับหาคาความยาวของสายอักขระ ดังตัวอยางการใชงานตอไปนี ้ ตัวอยางท่ี 2-9 ตัวอยางนี้จะแสดงความยาวของสายอักขระจากขอความหลายๆ ชุด

ฟงกชัน strlen () จะทําหนาท่ีนับจํานวนตัวอักขระในสายอักขระท่ีทําการระบุอยูในฟงกชัน จากคําส่ังสองคําส่ังแรกนับจาํนวนตัวอักขระได 14 และ 13 ตัวตามลําดบั เนื่องจากสัญลักษณ \n จะนับเปนหนึ่งตัวอักขระเทานัน้ สําหรับสายอักขระ “Hello” มีความยาวเทากับ 7 สายอักขระ “H” มีความยาวเทากับ 1 และสายอักขระวางมีความยาวเทากับ 0 ฟงกชัน strlen () อานวา ‘ สเตอร –เลน (Stir-Len)’ ไดกําหนดแยกไวในไฟล string.h ซ่ึงมีมากับระบบโปรแกรม C++ ดังนั้น ถาเม่ือใดที่มีการใชฟงกชัน strlen () จะตองมีการประกาศตัวเตรียมประมวลผลดวย ดงันี ้ #include<string.h> โดยกําหนดไวท่ีบรรทัดของ include เหนือสวนของฟงกชัน main ()

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 18: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 24

ตัวดําเนนิการ (Operator) ตัวดําเนินการ หรือโอเปอเรเตอรของ C++ คือ สัญลักษณท่ีใชทําหนาท่ีคํานวณนิพจนเม่ือไดคาผลลัพธ จะนําเอามาเก็บไวท่ีตัวแปร เราไดพบตัวดําเนินการสงออก << และตัวดําเนนิการกําหนดคา = มาแลว ตัวดําเนินการพื้นฐานสวนใหญจะเปนตัวดําเนินการทางดานคณิตศาสตร ไดแก เคร่ืองหมาย +,-,*,/ และ% เคร่ืองหมายเหลานี้จะดําเนินการกับขอมูลจํานวนเต็ม และไดผลลัพธเปนจํานวนเต็มแตอาจเปนคนละชนิด เชน m + n จะใหคาเปนผลรวมของคา m กับ n และประโยค m – n จะใหคาเปนผลตางระหวาง m กับ n สําหรับ –n หมายถึง คาลบของ n ประโยค m*n คือ ผลคูณของ m กับ n ประโยค m / n คือ ผลหารที่เปนสวนจํานวนเต็มเม่ือทําการหาร m ดวย n และประโยค m % n คือ เศษเหลือท่ีเปนจํานวนเต็มเม่ือทําการหาร m ดวย n ดังนั้น จึงสรุปการทํางานของตัวดําเนนิการไดดังตารางท่ี 2-1 ตารางท่ี 2-1 ตัวดําเนินการของ C++ (บางสวน)

โอเปอเรเตอรทางเลขคณิต หนาท่ี ตัวอยาง

+ บวก m + n - ลบ m - n - เคร่ืองหมายลบนําหนา - n * คูณ m * n / หาร m / n % เศษเหลือ m % n ++ เพิ่มคาอีก 1 ++n,n++ -- ลดคาลง 1 --n,n—

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 19: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 25

โอเปอเรเตอรทางตรรกะ หนาท่ี ตัวอยาง

&&

ทากับ

<= นอยกวาหรือเทากับ

โอเปอ าท่ี ตัวอยา

ทากับ

<= นอยกวาหรือเทากับ

โอเปอ าท่ี ตัวอยา

และ || หรือ || หรือ ! นิเสธ ! นิเสธ

= = เทากบั = = เทากบั != มเทากับ != มเทากับ > มากกวา > มากกวา >= มากกวาหรือเ>= มากกวาหรือเ< นอยกวา < นอยกวา

เรเตอรแบบ bit หนง เรเตอรแบบ bit หนง & และ | หรือ ^ เอกซคลูซีฟออร ~ นิเสธ >> เล่ือนไปทางขวา

ใีชเฉพาะสําหรับ type ชนิด จํานวนเต็มเทานั้น

ตัวอยางท่ี 2-10 ตัวดําเนินการจํานวนเต็ม โปรแกรมนี้แสดงการใชตัวดําเนินการคณติศาสตร 6 ตัวท่ีแสดงไวในตารางท่ี 2-1

<< เล่ือนไปทางซาย ในสวนของตวัโอเปอเรเตอรแบบ bit จะม

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 20: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 26

จากตัวอยางขางตนเปนท่ีนาสังเกตวา 38/5 = 7 และ 38% 5 = 3 ซ่ึงการดําเนินการท้ังสองอยางนี้ใหผลลัพธท่ีไดจากการหาร 38 ดวย 5 ไดเทากับ 38/5 = 7.6 สวนผลหารที่เปนจํานวนเต็มคือ 38/5 = 7 และเศษท่ีเหลือท่ีเปนจํานวนเต็ม คือ 3 ซ่ึงสามารถรวมกับตัวตั้ง 38 และตัวหาร 5 ดังความสัมพันธตอไปนี้ 7*5+3 = 38 การหารในลักษณะดังกลาวจะยุงยากมากข้ึนถาเลขจํานวนเต็มนั้นไมใชจํานวนมาก และท่ีแนนอน คือ ตวัหารตองไมเปนศูนย แตถาทั้ง m หรือ n เปนจํานวนเต็มลบแลว m/n และ m%n อาจใหผลลัพธท่ีแตกตางกันไปในแตละระบบคอมพิวเตอร มีเพยีงจุดเดียวเทานั้นท่ีเปนไปไดคือ q * n + r = m โดยท่ี q = m/n และ r = m%n

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 21: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 27

ตัวอยางการคํานวณ -14 หารดวย 5 ผลลัพธท่ีได -2.8 สําหรับผลหารท่ีเปนจํานวนเต็มจะถูกปดเศษเปน -3 หรือ -2 ถาระบบคอมพิวเตอร ปดผลหาร q เปน -3 แลว เศษท่ีเหลือ r จะเปน 1 แตถาระบบคอมพิวเตอรปดผลหาร q เปน -2 แลว เศษท่ีเหลือ r จะเปน -4 ตัวอยางท่ี 2-11 การหารจํานวนเต็มลบ โปรแกรมนี้ใชสําหรับพิจารณาวาคอมพวิเตอรจัดการอยางไรกับการหารของเลขจํานวนเต็มลบ

ลําดับการทํากอนและการจัดกลุมตัวดําเนินการ ภาษา C++ มีเคร่ืองหมายตัวดําเนินการอยูหลายตัว เนื่องจากนิพจนหนึง่ๆ อาจประกอบดวยตัวดําเนินการจํานวนหลายตัว ดังนี้ จึงตองพิจารณาถึงลําดบัของการคํานวณดวย มักจะคุนเคยกนัดีอยูแลวสําหรับลําดับการทํากอนของตัวดําเนินการทางคณิตศาสตร เชน เคร่ืองหมาย *,/ และ % จะมีลําดับการทํากอนสูงกวาเคร่ืองหมาย + และ – ซ่ึงเคร่ืองหมายท่ีมีลําดับการทํากอนสูงกวาจะไดรับการดําเนินการกอน เชน นิพจน 42 – 3*5 ลําดับการประมวลผล คือ 42 – (3*5) = 42 – 15 = 27

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 22: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 28

ตารางท่ี 2-2 ลําดับความสําคัญของโอเปอเรเตอรในภาษา C++ (บางสวน) [] ( ) ++,-- sizeof ~ ! - *,/,% +,- <<,>> <,>,<=,>= = =,!= && ||

กําหนดดัชนีของอาเรย กําหนดฟงกชัน เพิ่ม,ลด (วางขางหลังมีลําดับสูงกวา)

ขนาดของตัวแปร หรือ type นิเสธแบบ bit นิเสธทางตรรกะ เคร่ืองหมายลบนําหนา คูณ,หาร,หารเก็บเศษ (ลําดบัเดียวกัน)บวก,ลบ (ลําดับเดียวกนั)เล่ือนซาย,เล่ือนขวา เปรียบเทียบตางๆ เทากับ,ไมเทากับ และ ทางตรรกะ หรือ ทางตรรกะ

กรณีท่ีมีตวัดําเนินการท่ีตางกนั แตมีลําดับการทํากอนเทากับปรากฏอยูในนิพจนเดยีวกัน เชน ดําเนินการ + และ – ท้ังคูอยูในระดบัเดยีวกันและเปนการจัดกลุมซาย ดังนั้น ตวัดําเนินการจะทํางานจากซายไปขวา ดังตัวอยางตอไปนี้ 8 – 5 + 4 การทํางานลําดับแรก คือ 8 – 5 ไดผลลัพธเทากับ 3 จึงนําไปบวกกับ 4 ดังนี ้ (8 – 5) + 4 = 3 + 4 = 7 ตัวดําเนนิการเพิ่มและลด ลักษณะท่ีสําคัญหลายๆ อยางของภาษา C++ ไดมาจากภาษา C ส่ิงหนึ่งท่ีเปนประโยชนอยางมาก คือ ตัวดําเนินการเพิ่ม ++ และลด - - ตัวดําเนินการเหลานี้จะชวยลดรูปแบบการเขียนประโยคนิพจนเม่ือตองการเพิ่มหรือลดคาตัวแปร โดยเขียนใหอยูในรูปแบบอยางยอ ดังตัวอยางการใชงานตอไปนี ้ตัวอยางท่ี 2-12 ตัวดําเนินการเพ่ิมและลด

โปรแกรมนี้แสดงการทํางานของตัวดําเนนิการเพิ่มและลด

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 23: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 29

จากตัวอยางจะสังเกตเห็นไดวา ตวัดําเนินการเพ่ิมท้ังสองลักษณะ คือ เพิ่มกอนและหลังตัวแปร ไดแก ++m และ m++ จะใหคาเหมือนกนัคือ การเพิ่มคา 1 ใหกับตัวแปร m ในทํานองเดียวกัน สําหรับตัวดําเนินการลดทั้งกอนและหลังไดแก- - n และ n- - ก็จะใหคาเทากันซ่ึงหมายถึง การลบคา 1 ออกจากตัวแปร n การเขียนนิพจนตามลําพังในลักษณะเชนนี้ คือ ++m และ m++ จะมีความหมายเหมือนกันกับประโยคนพิจนตอไปนี ้ m=m+1; หมายถึง การเพ่ิมคาของตัวแปร m อีก 1 คา ในลักษณะท่ีคลายกัน คือ - - n และ n- - จึงเหมือนกับประโยคนิพจน n=n-1; อยางไรก็ตาม ถามีการใชตัวดําเนินการเพ่ิมและลดกับนพิจนยอย ( หมายถึง สวนนิพจนท่ีอยูภายในนพิจนประโยคใหญ) ตัวดําเนินการเพิ่มกอน เชน ++m จะใหความหมายท่ีตางจาก m++ โดยที่ตัว

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 24: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 30

เนื่องจากกระบวนการเพิ่มเทียบเทากับการใชการกําหนดคาแบบแยกตามลําพัง เพราะจริงๆ แลวเสมือนมีสองคําส่ังท่ีจะตองปฏิบัติงาน เม่ือการดําเนินการเพิ่มคาไดใชเปนสวนของนิพจนยอย การกําหนดคาเพิ่มและนิพจนท่ีใหญกวาท่ีอยูในประโยคเดียวกัน ความแตกตางระหวางการเพิ่มคากอนและการเพิ่มคาหลัง มีความแตกตางกันตรงท่ีปฏิบัติตัวกําหนดคากอนหรือหลังปฏิบัติการนิพจนท่ีอยูตดิกัน ตัวอยาง ท่ี 2-13 ตัวดําเนินการเพ่ิมกอนและหลัง โปรแกรมนี้แสดงความแตกตางระหวางตัวดําเนินการเพิม่กอนและหลัง

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 25: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 31

การใชตัวดําเนนิการเพิ่มและลดในนิพจนยอยนี้อาจทําใหเกิดการสับสน ดังนั้น จึงควรใชดวยความระมัดระวัง เชน ลําดับของการทํางานนิพจนท่ีมีสวนเกี่ยวของกบัตัวดําเนินการเหลานี้ไมไดถูกกําหนดในหลักการของภาษาโปรแกรม เม่ือเปนเชนนีจ้ึงไมอาจคาดการได ตัวอยางท่ี 2-14 แสดงผลลัพธท่ีไมสามารถทราบคาท่ีแนนอนไดของการคํานวณนิพจนยอย

ในการกําหนดคาใหกับตัวแปร x นั้น เร่ิมตนดวย n ไดเพิ่มคากอนเปน 6 แลวจึงถูกลดคากลับมาเปน 5 กอนท่ีจะทําการคูณ ดังนั้น จงึไดกําหนดผลการคูณ 5*5 ใหกับตัวแปร x ในบรรทัดสุดทาย นิพจนยอยจะไดรับการประมวลผลจากขวาไปซาย การจัดกลุมซายของตัวดําเนินการสงออก << ไมอยูในประเด็น เพราะวาไมมีเคร่ืองหมายตัวดําเนนิการอ่ืนท่ีมีลําดับการทํากอนระดับเดียวกนัปะปนอยูในนิพจนนีด้วย การกําหนดนพิจนเชิงประกอบ ตัวดําเนินการเพิ่มและลด คือ การกําหนดคานิพจนอยางยอ ภาษา C++ สามารถกําหนดคาโดยใชรวมกับตัวดาํเนินการอ่ืนได ซ่ึงมีรูปแบบการเขียนเชิงผสม ดังนี้

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 26: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 32

Variable op = expression

โดยท่ี op คือ ตัวดําเนินการ ผลของการกําหนดคาเชิงผสมมีผลเหมือนกับ

Variable = Variable op expression ตัวอยางท่ี 2-15 กําหนดคาเชิงผสม

ตัวอยางท่ี 2-16 ตัวดําเนินการกําหนดคา โปรแกรมนี้แสดงการใชตัวดําเนินการเชิงผสม

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 27: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 33

ประโยค n += 9 หมายถึง การเพ่ิมคา 9 ใหกับตัวแปร n ประโยค n -= 5 หมายถึง การลบคา n ดวย 5 ประโยค n* = 2 หมายถึง การคูณ n ดวย 2 สวนลน (Overflow) จํานวนเต็มในเคร่ืองคอมพิวเตอรจะมีขอบเขตจํากัดตามท่ีกลาวมาแลว ไมเหมือนกับจํานวนเต็มทางคณิตศาสตรท่ัวไป ดงันั้น ถาคาของตัวแปรจํานวนเต็มเกนิพิสัยจะเกิดสภาวการณท่ีเรียกวา สวนลน (Overflow) ตัวอยางท่ี 2-17 การทดสอบ Overflow โปรแกรมนี้จะแสดงใหเห็นวาเกดิอะไรขึน้ เม่ือวัตถุชนดิ short มีสวนลนเกินพิสัย

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.

Page 28: บทที่ 2 พื้นฐานภาษา C++bls.buu.ac.th/~s54143/15Feb21/suwannaP/lesson2.pdf · 2010-11-22 · บทที่: พื้ 2 นฐานภาษา c++

บทที่ 2 : พ้ืนฐานภาษา C++ 34

คาของจํานวนเต็มจะมีคาใกลเคียงคาท่ีจุดพิสัยของ 32767 และ -32768 จากตัวอยางจะพบวาคาของ 32767 +1 ไดเทากับ -32768 ซ่ึงเปนคาท่ีผิด คอมพิวเตอรสวนใหญจะมีลักษณะการจัดการกับสวนลนเชนนี้ ดังนั้น คาท่ีอยูถัดจากคาสูงสุดจะกลายเปนคาตํ่าสุดซ่ึงเปนจุดท่ีอันตรายมาก เพราะไมมีสัญญาณบอกใหทราบถึงจดุผิดพลาดตรงนี้ โปรแกรมยังสามารถดําเนินการไปไดตามปกติ การเกิดสวนลนของจํานวนเต็มเชนนี้ เปนขอผิดพลาดชนิดหนึ่งท่ีเกดิข้ึนตอน Run โปรแกรม ตัวอยางขอผิดพลาดอ่ืนๆ ท่ีเกิดกับขอมูลจาํนวนเต็ม คือ การหารดวยศูนย แตขอผิดพลาดน้ีสามารถรูไดเพราะโปรแกรมจะเกิดการขัดของและไมทํางานตอ

การโปรแกรมเชิงวัตถุ C++(3901-2006) By: Suwanna P.