ลำดับชั้นของคลาสสตรีม
คลาส C++ ประกอบด้วยเมธอดที่จำเป็นในการจัดการและควบคุมข้อมูลที่อยู่ในนั้น
float, doubles และ class เป็นประเภทข้อมูลที่คล้ายกับ int ตัวแปรเฉพาะที่มีคลาสเป็นชนิดข้อมูลจะเรียกว่าอ็อบเจ็กต์ C++ ออบเจ็กต์พิเศษที่กำหนดไว้ล่วงหน้า 'cin' และ 'cout' มีคลาสต่างๆ ตามประเภทข้อมูล
ข้อมูลที่เขียนไปยัง 'cout' หรืออ่านจาก 'cin' เป็นตัวอย่างของข้อมูลที่ไหลเข้าหรือออกจากโปรแกรมในภาษา C++ ขณะนี้ เรากำลังพิจารณาสี่คลาสต่อไปนี้สำหรับคลาสนี้:
สตรีมมัน
สตรีมอินพุตนี้อาจให้บริการวัตถุประสงค์ใดก็ได้ ภาพประกอบของ istream คือ cin
Ostream
เป็นสตรีมเอาต์พุตที่มีการใช้งานหลายอย่าง Ostreams มาในรูปของ cout และ cin
ถ้าสตรีม
เป็นสตรีมของไฟล์อินพุต
ของกระแสน้ำ
เป็นสตรีมของไฟล์เอาต์พุต การสืบทอดเป็นแนวคิดที่ใช้อย่างมากในการเขียนโปรแกรมเชิงวัตถุ เช่นใน C++ โดยที่บางคลาสใช้คุณลักษณะของคลาสอื่นที่สร้างไว้แล้ว คลาสบรรพบุรุษจะกลายเป็นความเชี่ยวชาญเฉพาะทางผ่านการรวมคุณสมบัติใหม่
ถ้าสตรีมคลาส
ifstream สามารถปฏิบัติได้ในลักษณะเดียวกับ istream ซึ่งเป็นสิ่งที่เป็นอยู่
ของสตรีมคลาส
ในลักษณะเดียวกับที่ ifstreams ทำงาน แต่มีเอาต์พุตแทนอินพุต, ofstream เป็นสตรีมไฟล์เอาต์พุต มีการใช้ Ofstream ในลักษณะเดียวกับ Cout หลังจากสร้าง เปิด และตรวจสอบว่าไม่มีข้อผิดพลาด
คลาส Ios
จากคลาสนี้ คลาสสตรีมทั้งหมดลงมา กระแสข้อมูลขาเข้าและขาออกเป็นสองประเภทที่แตกต่างกัน
มันกำหนดส่วนของสตรีมที่ไม่ขึ้นอยู่กับสถานะอินพุตหรือเอาต์พุตของสตรีมในฐาน ios
ตรงข้ามกับสมาชิกที่กล่าวถึงในฐาน ios สมาชิกที่ขึ้นอยู่กับพารามิเตอร์เทมเพลตจะอธิบายไว้ในส่วนนี้
สตรีม (อินพุต)
เนื่องจากความซับซ้อนของไลบรารี iostream เราจึงไม่สามารถครอบคลุมทั้งหมดได้ในบทเรียนเหล่านี้ อย่างไรก็ตาม เราจะเน้นฟังก์ชันที่ใช้บ่อยที่สุด ในส่วนนี้ เราจะดูคลาสอินพุตจากมุมต่างๆ (istream)
เราได้เรียนรู้ว่าตัวดำเนินการสกัด (>>) จะถูกใช้เพื่อรับข้อมูลจากสตรีมอินพุต
ลำธาร
ในภาษาการเขียนโปรแกรม C++ สตรีมอินพุตจะได้รับการจัดการโดยคลาส istream อินพุตถูกอ่านและทำความเข้าใจเป็นชุดอักขระโดยใช้ออบเจ็กต์สตรีมอินพุตเหล่านี้ อินพุตถูกจัดการโดย cin
คลาสสมาชิก
istream::sentry
คลาสที่ดำเนินการหลายอย่างและทุกครั้งที่มีการดำเนินการตามขั้นตอนการป้อนข้อมูล ตัวทำลายล้างไม่จำเป็นต้องดำเนินการใดๆ อย่างไรก็ตาม การใช้งานอาจดำเนินการเริ่มต้นเพิ่มเติมหรือล้างข้อมูลบนสตรีมที่ใช้ร่วมกันโดยการดำเนินการอินพุตทั้งหมดโดยใช้การสร้างและการทำลายวัตถุยาม
ฟังก์ชั่น
istream::gcount
ให้จำนวนอักขระที่ได้รับจากการดำเนินการอินพุตที่ยังไม่ได้จัดรูปแบบล่าสุดของออบเจ็กต์ โพรซีเดอร์อินพุตที่ไม่ได้จัดรูปแบบ—รับ, รับไลน์, เพิกเฉย, แอบมอง, อ่าน, อ่านบางส่วน, ใส่กลับ, และ unget— เปลี่ยนค่าที่ส่งคืนโดยฟังก์ชันนี้ อย่างไรก็ตาม โปรดทราบว่าการเรียก peeks, putback หรือ unget จะไม่แยกอักขระใดๆ ด้วยเหตุนี้ การนับจะคืนค่าเป็น 0 เสมอ
istream::get
อักขระตัวเดียวนำอักขระหนึ่งตัวออกจากสตรีม อักขระถูกตั้งค่าเป็นค่าอาร์กิวเมนต์หรือส่งคืน (ลายเซ็นแรก) (ลายเซ็นที่สอง)
สตริง C: หากมีอักขระคั่นอยู่ อักขระนั้นจะไม่ถูกลบออกจากลำดับอินพุต แต่จะเก็บไว้เป็นอักขระต่อไปนี้เพื่อดึงข้อมูลจากสตรีมหากมีอยู่
istream::getline
ลบอักขระออกจากสตรีมเป็นอินพุตที่ไม่ได้จัดรูปแบบและบันทึกเป็นสตริง c ในตัวแปร 's' จนกว่าอักขระที่แยกออกมาจะกลายเป็นอักขระคั่นหรืออักขระ 'n' ถูกเขียนเป็น 's' นอกจากนี้ เมธอดจะหยุดการแยกอักขระหากถึงจุดสิ้นสุดของไฟล์
ภายใน ฟังก์ชันจะสร้างวัตถุก่อนที่จะเข้าถึงลำดับอินพุต สุดท้าย มันจะฆ่าอ็อบเจ็กต์ก่อนที่จะส่งคืน โดยแยกอักขระออกจากออบเจกต์บัฟเฟอร์สตรีมที่เกี่ยวข้อง (สมมติว่าทุกอย่างอยู่ในลำดับ) ราวกับว่าดำเนินการหนึ่งในเมธอดของสมาชิก sbumpc หรือ sgetc
istream::ละเว้น
อักขระจะถูกนำออกจากลำดับอินพุตและละทิ้งทีละตัวจนกว่าอักขระ 'n' ตัวใดตัวหนึ่งจะถูกนำออกหรือตัวหนึ่งเปรียบเทียบเท่ากับตัวคั่น นอกจากนี้ หากถึงจุดสิ้นสุดของไฟล์ ฟังก์ชันจะหยุดการแยกอักขระ ฟังก์ชันจะตั้งค่าสถานะ 'eofbit' หากมาถึงจุดนี้เร็วเกินไป (ก่อนที่จะแยกอักขระ n ตัวหรือพบเดลิม)
ก่อนเข้าถึงลำดับอินพุต ฟังก์ชันจะสร้างวัตถุยามภายใน (โดยที่ noskipws จะเป็นจริง) ในที่สุด มันจะฆ่าวัตถุยามก่อนที่จะกลับมา โดยแยกอักขระออกจากวัตถุบัฟเฟอร์สตรีมที่เกี่ยวข้อง (สมมติว่าทุกอย่างอยู่ในลำดับ) ราวกับว่าดำเนินการหนึ่งในวิธีการของสมาชิก: sbumpc หรือ sgetc
istream::operator>>
ตัวดำเนินการแยก (>>) ใช้ตัวดำเนินการนี้กับกระแสข้อมูลเข้า มีสมาชิกเป็นฟังก์ชันมากเกินไป
ประเภทเลขคณิต
อักขระจะถูกนำออกจากสตรีมและแยกวิเคราะห์ตามลำดับเพื่อแสดงค่าของประเภทที่ถูกต้อง จากนั้นจะบันทึกเป็นค่าของ 'val' ก่อนเข้าถึงลำดับอินพุต ฟังก์ชันจะสร้างวัตถุยามภายใน (noskipws จะเป็นเท็จ) หากทุกอย่างเรียบร้อยดี ก็จะรัน num get::get เพื่อดำเนินการแยกและแยกวิเคราะห์ให้เสร็จสิ้นในขณะที่แก้ไขสถานะภายในของสตรีม ในที่สุดวัตถุยามจะถูกทำลายก่อนที่มันจะจากไป
ฟังก์ชันนี้สร้างวัตถุยามภายในก่อนที่จะอ่านลำดับอินพุต โดยจะถือเป็นการดำเนินการอินพุตที่จัดรูปแบบ ในที่สุด มันจะฆ่าวัตถุยามก่อนที่จะกลับมา โดยแยกอักขระออกจากวัตถุบัฟเฟอร์สตรีมที่เกี่ยวข้อง (สมมติว่าทุกอย่างอยู่ในลำดับ) ราวกับว่าดำเนินการหนึ่งในเมธอดของสมาชิก sbumpc หรือ sgetc
หุ่นยนต์
pf (*this) ถูกเรียก โดยที่ pf อาจเป็นตัวบงการ Manipulators เป็นกิจวัตรที่สร้างขึ้นโดยเฉพาะเพื่อเรียกเมื่อมีการเรียกใช้ตัวดำเนินการนี้ ลำดับอินพุตไม่ได้รับผลกระทบจากขั้นตอนนี้และไม่มีการแยกอักขระ
istream::putback
อักขระที่กู้คืนจะพยายามย้ายเคอร์เซอร์ลงหนึ่งอักขระในสตรีม เพื่อให้สามารถดึงอักขระตัวสุดท้ายที่ดึงมาจากสตรีมได้อีกครั้งโดยการดำเนินการอินพุต
ก่อนเข้าถึงลำดับอินพุต ฟังก์ชันจะสร้างวัตถุยามภายใน จากนั้นจะเรียก sputbackc(c) บนวัตถุบัฟเฟอร์สตรีมที่เกี่ยวข้อง (ถ้าดี) ในที่สุดวัตถุยามจะถูกทำลายก่อนที่มันจะจากไป
istream::read
อ่านบล็อกข้อมูล:
อักขระ 'n' ถูกนำมาจากสตรีมและจัดเก็บในอาร์เรย์ที่ชี้ไปที่ 's' ฟังก์ชันนี้เพียงทำซ้ำกลุ่มข้อมูลโดยไม่ตรวจสอบเนื้อหาของข้อมูลหรือเพิ่มอักขระว่างในตอนท้าย
ภายในฟังก์ชัน วัตถุยามจะถูกสร้างขึ้นก่อนการเข้าถึงลำดับอินพุต ในที่สุด มันจะฆ่าวัตถุยามก่อนที่จะกลับมา โดยแยกอักขระออกจากวัตถุบัฟเฟอร์สตรีมที่เกี่ยวข้อง (สมมติว่าทุกอย่างอยู่ในลำดับ) ราวกับว่าดำเนินการหนึ่งในวิธีการของสมาชิก: sbumpc หรือ sgetc
จำนวนสมาชิกที่เรียกจะส่งคืนจำนวนอักขระทั้งหมดที่ฟังก์ชันนี้อ่านและจัดเก็บอย่างถูกต้อง
istream::readsome
ฟังก์ชันนี้ขึ้นอยู่กับการทำงานภายในของออบเจ็กต์บัฟเฟอร์สตรีมที่เชื่อมโยงกับสตรีม ซึ่งลักษณะการทำงานส่วนใหญ่กำหนดไว้สำหรับคลาสมาตรฐาน
ภายในฟังก์ชัน วัตถุยามจะถูกสร้างขึ้นก่อนการเข้าถึงลำดับอินพุต จากนั้น (หากสำเร็จ) จะเรียกใช้ฟังก์ชันสมาชิกในความพร้อมใช้งานของออบเจ็กต์บัฟเฟอร์สตรีมเพื่อกำหนดจำนวนอักขระที่พร้อมใช้งานก่อนที่จะเรียก 'sbumpc' เพื่อแยกอักขระออกตามจำนวนนั้น (หรือ sgetc) ในที่สุดวัตถุยามจะถูกทำลายก่อนที่มันจะจากไป
istream::seekg
ตำแหน่งในบรรทัดอินพุตกำหนดตำแหน่งที่จะดึงอักขระต่อไปนี้ออกจากสตรีมอินพุต ก่อนอ่านลำดับอินพุต ฟังก์ชันจะสร้างวัตถุยามภายใน จากนั้น (ถ้าตกลง) จะทำการเรียกหนึ่งในสองรายการไปยังอ็อบเจ็กต์บัฟเฟอร์สตรีมที่เกี่ยวข้อง: pubseekpos (1) หรือ pubeekoff (2), (ถ้ามี) ในที่สุดก็ลบล้างไอเทมยามและจากไป
istream::sync
จัดตำแหน่งบัฟเฟอร์อินพุต:
นำลำดับอินพุตที่ควบคุมของบัฟเฟอร์สตรีมที่เชื่อมโยงมาซิงค์ การใช้งานเฉพาะของวัตถุบัฟเฟอร์สตรีมที่เชื่อมต่อกับสตรีมจะกำหนดลักษณะเฉพาะของการดำเนินการ
istream::tellg
รับตำแหน่งของลำดับอินพุต:
มันให้ตำแหน่งของตัวละครปัจจุบันในกระแสอินพุต ฟังก์ชันจะคืนค่า -1 หากสมาชิกล้มเหลว มันจะคืนค่าเป็น จริง
มันจะส่งคืน rdbuf()->pubseeoff ถ้าไม่ใช่ (0,cur,in) ในที่สุดวัตถุยามจะถูกทำลายก่อนที่มันจะจากไป
istream::unget
ลบอักขระ:
พยายามย้ายเคอร์เซอร์ลงหนึ่งอักขระในสตรีมเพื่อให้สามารถดึงอักขระตัวสุดท้ายที่ดึงมาจากสตรีมได้อีกครั้งโดยการดำเนินการอินพุต
ไม่ใช่สมาชิก
โอเปอเรเตอร์>> (istream)
โอเปอเรเตอร์การแยก (>>) จัดเตรียมอินพุตที่จัดรูปแบบด้วยการดำเนินการนี้เมื่อนำไปใช้กับสตรีมอินพุต
อักขระตัวหนึ่ง: ลำดับอักขระนำอักขระตัวถัดไปออกมาและเก็บเป็นค่าของ 'c' กระบวนการแยกอักขระออกจากคือและเก็บไว้ใน s ในรูปแบบ c-string จะหยุด (หากความกว้างไม่เป็นศูนย์) เมื่อพบอักขระช่องว่างหรือ (ความกว้าง ()-1) อักขระถูกแยกออก
Extraction of rvalue: เปิดใช้งานการแยกจากอ็อบเจ็กต์ rvalue istream ซึ่งมีผลลัพธ์เหมือนกับการแยกจาก lvalues: มันเรียก is>>Val
ตัวอย่าง 1
ในกรณีนี้ เราจะตรวจสอบว่าเราอาจได้รับค่าใด ๆ จากผู้ใช้แล้วแสดงผลบนหน้าจอ
#includeโดยใช้ เนมสเปซ มาตรฐาน ;
int หลัก ( )
{
int ไม่ ;
ศาล << 'กรุณากรอกตัวเลข' ;
การกิน >> ไม่ ;
ศาล << 'ค่าที่ป้อนคือ: ' << ไม่ << ' \n ' ;
}
เราจะรวมไฟล์ส่วนหัว
ผู้ใช้จะป้อนค่าสุ่มหลังจากข้อความนี้ปรากฏบนหน้าจอ จากนั้นจะใช้คำสั่ง 'cin' คำสั่งนี้ต้องการให้ผู้ใช้ระบุค่า หมายเลขที่ป้อนของผู้ใช้จะถูกบันทึกไว้ในตัวแปร ค่าที่ผู้ใช้ให้มาจะแสดงบนหน้าจอโดยใช้คำสั่ง 'cout'
ตัวอย่าง 2
ในกรณีนี้ เราจะเห็นว่าเราได้รับชื่อจากผู้ใช้อย่างไร แล้วแสดงบนหน้าจอเป็นผล
#includeโดยใช้ เนมสเปซ มาตรฐาน ;
int หลัก ( )
{
char ชื่อ [ 125 ] ;
ศาล << 'ใส่ชื่อของคุณ' << endl ;
การกิน >> ws ;
การกิน . getline ( ชื่อ, 125 ) ;
ศาล << ชื่อ << endl ;
กลับ 0 ;
}
เราจะรวมไฟล์ส่วนหัว
คำสั่งนี้ใช้ค่าจากผู้ใช้ ชื่อที่ระบุจะถูกเก็บไว้ในตัวแปร 'ws' ในที่นี้ เราจะใช้คำสั่ง 'cin' อีกครั้ง ภายในคำสั่งนี้ ฟังก์ชัน getline() จะถูกนำไปใช้ ฟังก์ชันนี้มีพารามิเตอร์ซึ่งรวมถึงชื่อที่ผู้ใช้ป้อนและความยาวของชื่อ คำสั่ง 'cout' จะใช้เพื่อแสดงชื่อที่ผู้ใช้ให้มา หากต้องการยกเลิกโค้ด จะใช้คำสั่ง 'return 0'
บทสรุป
อันดับแรก เราได้พูดถึงฟังก์ชัน C++ istream จากนั้นเราสังเกตหน้าที่หลายประการและคำจำกัดความที่สำคัญที่กล่าวถึง ในบทความนี้ เราได้เรียกใช้โค้ดต่างๆ ที่มีฟังก์ชัน istream ที่หลากหลาย ในรหัสแรก เราจะนำหมายเลขใดๆ จากผู้ใช้มาแสดงหมายเลขนั้นบนหน้าจอ ในอันที่สอง ผู้ใช้ป้อนชื่อและพิมพ์ชื่อนั้นบนหน้าจอ