Namespace ใน C ++ ใช้เพื่อจัดระเบียบโค้ดให้เป็นกลุ่มตรรกะและเพื่อป้องกันการชนกันของชื่อที่อาจเกิดขึ้นโดยเฉพาะอย่างยิ่งเมื่อ codebase ของคุณมีหลายไลบรารี ในบทความนี้คำแนะนำต่อไปนี้จะครอบคลุม:
- ความต้องการเนมสเปซ
- การกำหนดเนมสเปซใน C ++
- จุดที่ต้องจำขณะกำหนดเนมสเปซ
- การใช้ Namespace ใน C ++
- เนมสเปซที่ไม่ชัดเจน
- เนมสเปซที่ซ้อนกัน
ความต้องการเนมสเปซ
ลองพิจารณาสถานการณ์เรากำลังเขียนโค้ดบางตัวที่มีฟังก์ชันชื่อ abc () และมีไลบรารีที่กำหนดไว้ล่วงหน้าอีกอันหนึ่งซึ่งมีฟังก์ชันเดียวกัน abc () ตอนนี้ในช่วงเวลาของการคอมไพเลอร์คอมไพเลอร์ไม่มีเบาะแสว่าฟังก์ชัน abc () รุ่นใดที่เราอ้างถึงภายในโค้ดของเรา
เพื่อเอาชนะเนมสเปซที่ยากลำบากนี้ได้รับการออกแบบและใช้เป็นข้อมูลเพิ่มเติมเพื่อแยกความแตกต่างของฟังก์ชันตัวแปรคลาส ฯลฯ ที่คล้ายคลึงกันโดยมีชื่อเดียวกันในไลบรารีต่างๆ การใช้เนมสเปซเราสามารถกำหนดบริบทที่กำหนดชื่อได้ โดยพื้นฐานแล้วเนมสเปซกำหนดขอบเขต
ประเภทและฟังก์ชันไลบรารีมาตรฐาน C ++ ทั้งหมดถูกประกาศในเนมสเปซมาตรฐานหรือเนมสเปซที่ซ้อนอยู่ภายใน std ดังนั้นจึงถูกใช้กันอย่างแพร่หลายในโปรแกรมส่วนใหญ่
การกำหนดเนมสเปซ
ในการกำหนดเนมสเปซเราเริ่มต้นด้วยคีย์เวิร์ดเนมสเปซตามด้วยชื่อเนมสเปซดังนี้:
โครงสร้างข้อมูลและอัลกอริทึมใน java
namespace namespace_name {int a, b // code declarations โดยที่ // a และ b ถูกประกาศใน // namespace_name's scope}
จุดที่ต้องจำขณะกำหนดเนมสเปซ
- การประกาศ Namespace ปรากฏเฉพาะในขอบเขตส่วนกลาง
- การประกาศ Namespace ไม่มีตัวระบุการเข้าถึง
- การประกาศเนมสเปซสามารถซ้อนกันภายในเนมสเปซอื่น
- ไม่จำเป็นต้องให้เครื่องหมายอัฒภาคหลังวงเล็บปีกกาปิดของนิยามของเนมสเปซ
- คำจำกัดความของเนมสเปซสามารถแบ่งออกเป็นหลายหน่วยได้
#include using namespace std namespace first_function {void func () {cout<< 'Inside first_function' << endl } } namespace second_function { void func() { cout << 'Inside second_function' << endl } } int main () { // Calls function from first name space. first_function::func() // Calls function from second name space. second_function::func() return 0 }
เอาท์พุต:
ในตัวอย่างข้างต้นเพื่อกำหนดฟังก์ชัน func () สองครั้งที่แตกต่างกันเราใช้แนวคิดเนมสเปซ เรากำหนดฟังก์ชันแรกภายใต้ namespace first_function และฟังก์ชันที่สองภายใต้ namespace second_function ในการเรียกใช้ฟังก์ชันเหล่านี้เราใช้ตัวดำเนินการความละเอียดขอบเขตในลักษณะต่อไปนี้ - first_function :: func () และ second_function :: func ()
java สำหรับตัวอย่างโปรแกรมลูป
การใช้ Namespace ใน C ++
มีสามวิธีในการใช้เนมสเปซในโปรแกรม
- คำสั่งการใช้
- การประกาศใช้
- ตัวดำเนินการแก้ไขขอบเขต (: :)
คำสั่งการใช้
เราสามารถหลีกเลี่ยงการเติมเนมสเปซล่วงหน้าด้วยนามสกุล โดยใช้ คำสั่งเนมสเปซ โดยใช้ คำหลักช่วยให้เราสามารถนำเข้าเนมสเปซทั้งหมดไปยังโปรแกรมของคุณได้โดยมีขอบเขตทั่วโลก สามารถใช้เพื่อนำเข้าเนมสเปซไปยังเนมสเปซอื่นหรือโปรแกรมใด ๆ ตามความต้องการของเรา
พิจารณาไฟล์ส่วนหัว Namespace_first.h:
เนมสเปซขั้นแรก {int a class First_class {int i}}
การรวมไฟล์ส่วนหัวเนมสเปซด้านบนในไฟล์ Namespace_second.h: รวม“ Namespace_first.h”
เนมสเปซวินาที {using namespace First First_class obj int y}
เรานำเข้า namespace_First ไปยัง namespace_Second ดังนั้นคลาส First_class จะพร้อมใช้งานใน namespace_Second ดังนั้นเราสามารถเขียนโปรแกรมต่อไปนี้ในไฟล์แยกต่างหากสมมติว่า new_file.cpp
#include 'Namespace_second.h' void test () {ใช้เนมสเปซวินาที // การสร้างอ็อบเจกต์ของคลาส First_class First_class obj2}
ดังนั้น คำสั่งการใช้งานช่วยให้ใช้เนมสเปซใน C ++ ได้ง่ายขึ้นมากทุกที่ที่คุณต้องการ
การประกาศใช้
ในการประกาศใช้เรานำเข้าชื่อเฉพาะทีละชื่อซึ่งมีให้เฉพาะในขอบเขตปัจจุบันและเรียกด้วยความช่วยเหลือของการแก้ไขขอบเขต หมายเหตุ: ชื่อที่นำเข้าโดยใช้คำประกาศสามารถแทนที่ชื่อที่นำเข้าโดยใช้คำสั่ง เราสามารถดูสิ่งนี้ได้จากตัวอย่างด้านล่าง
ให้เราพิจารณาไฟล์ส่วนหัว New_File.h:
เนมสเปซแรก {โมฆะ A () {cout<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }
ตอนนี้เรามาสร้างไฟล์โปรแกรมใหม่ชื่อ New_file_2.cpp พร้อมรหัสด้านล่าง:
#include 'New_file.h' เป็นโมฆะ B () {ใช้เนมสเปซก่อน // ใช้คำสั่งโดยใช้วินาที :: A // โดยใช้การประกาศ First :: A () // class A () ของ First namespace A () // เรียก A () ของเนมสเปซที่สอง}
ตัวดำเนินการความละเอียดขอบเขต (: :)
เราสามารถระบุชื่อใด ๆ ที่ประกาศในเนมสเปซอย่างชัดเจนโดยใช้ชื่อของเนมสเปซและการแก้ไขขอบเขต ' :: ' ตัวดำเนินการที่มีตัวระบุ
เนมสเปซ New_space {คลาส X {static int i public: void func ()} // คลาสการประกาศชื่อคลาส Y} // การเริ่มต้นตัวแปรคลาสคงที่ int New_space :: X :: i = 23 คลาส New_space :: Y {int a public: int getdata () {cout<< a } // Constructor declaration Y() } // Constructor definition explicitly New_space::Y::Y() { a=0 }
เนมสเปซที่ไม่ชัดเจนใน C ++
ดังที่เราทราบดีว่าเนมสเปซใน C ++ สามารถกำหนดได้หลายส่วนดังนั้นจึงประกอบด้วยผลรวมของส่วนที่กำหนดแยกกัน ดังนั้นหากส่วนหนึ่งของเนมสเปซต้องการชื่อที่กำหนดในไฟล์อื่นชื่อนั้นจะต้องถูกประกาศในขอบเขตของมัน การเขียนเนมสเปซต่อไปนี้ในลักษณะต่อไปนี้เป็นการกำหนดเนมสเปซใหม่หรือเพิ่มองค์ประกอบใหม่ให้กับเนมสเปซที่มีอยู่:
sqoop in hadoop คืออะไร
เนมสเปซ namespace_name {// code body}
เนมสเปซที่ซ้อนกันใน C ++
เนมสเปซสามารถซ้อนกันได้อย่างง่ายดายและเราสามารถกำหนดหนึ่งเนมสเปซภายในเนมสเปซอื่นได้ดังนี้:
namespace namespace_name1 {// code body ของ namespace_name1 namespace namespace_name2 {// code body ซ้อนกัน namamespace_name2}}
ด้วยเหตุนี้เราจึงมาถึงจุดสิ้นสุดของ Namespace ในบทความ C ++ ฉันหวังว่าคุณจะเข้าใจว่าเนมสเปซใน C ++ คืออะไรและอะไรคือวิธีการต่างๆในการกำหนด หากคุณต้องการเรียนรู้เพิ่มเติมโปรดดูไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ หลักสูตรการฝึกอบรมและการรับรอง Java J2EE และ SOA ของ Edureka ได้รับการออกแบบมาเพื่อฝึกอบรมคุณสำหรับแนวคิด Java ทั้งหลักและขั้นสูงพร้อมกับกรอบงาน Java ต่างๆเช่น Hibernate & Spring
มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบล็อกนี้และเราจะติดต่อกลับโดยเร็วที่สุด