สมมติว่าเราต้องการสร้างประเภทข้อมูลของนักเรียนด้วยการซ่อนข้อมูลและการห่อหุ้ม นักเรียนต้องมี first_name,last_name, age และ class แต่จะไม่สามารถเข้าถึงตัวแปรเหล่านี้ได้โดยตรง เราจะต้องกำหนดฟังก์ชันบางอย่าง เช่น get_firstname() set_firstname(), get_age() set_age() เป็นต้น เพื่อดึงและอัปเดตค่าตัวแปร และฟังก์ชัน to_string() เพื่อแสดงรายละเอียดของนักเรียนในรูปแบบนี้ (age, first_name, last_name, class ). จากคอนโซลใช้พารามิเตอร์สี่ตัวเป็นอินพุตและตั้งค่าโดยใช้เมธอด setter ที่เรากำหนดไว้ และแสดงรายการแต่ละรายการโดยใช้เมธอด getter และสุดท้ายใช้เมธอด to_string()
ดังนั้นหากอินพุตเป็นแบบ
priyam kundu 16 10
แล้วผลลัพธ์ที่ได้จะเป็น
16 priyam kundu 10 (16, priyam, kundu, 10)
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดคลาสด้วย first_name, last_name ของประเภท string และ age, cl ของประเภท integer
-
กำหนดฟังก์ชัน getter สำหรับแอตทริบิวต์ทั้งหมด
-
กำหนดฟังก์ชัน setter สำหรับแอตทริบิวต์ทั้งหมด
-
กำหนดฟังก์ชัน to_string() โดยใช้ออบเจกต์ string-stream และสร้างสตริงที่จัดรูปแบบที่ตรงกับรูปแบบเอาต์พุต
-
จากวิธีหลัก ให้ทำดังต่อไปนี้ −
-
อ่านแต่ละบรรทัดแล้วเก็บ first_name,last_name, age, cl ตามลำดับ
-
เรียกฟังก์ชัน setter เพื่อตั้งค่าเหล่านี้ให้กับสมาชิกคลาส
-
พิมพ์แอตทริบิวต์ทั้งหมดโดยใช้วิธีการรับ;
-
แสดงข้อมูลนักเรียนในรูปแบบนี้ (อายุ ชื่อจริง นามสกุล cl) โดยใช้ฟังก์ชัน to_string()
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <iostream>
#include <sstream>
using namespace std;
class Student{
private:
int age, cl;
string first_name, last_name;
public:
int get_age(){return age;}
int get_class(){return cl;}
string get_firstname(){return first_name;}
string get_lastname(){return last_name;}
void set_age(int a){age = a;}
void set_class(int c){cl = c;}
void set_firstname(string fn){first_name = fn;}
void set_lastname(string ln){last_name = ln;}
string to_string(){
stringstream ss;
ss << "(" << age << ", " << first_name << ", " << last_name << ", " << cl << ")";
return ss.str();
}
};
int main() {
Student stud;
int age, cl;
string first_name, last_name;
cin >> first_name >> last_name >> age >> cl;
stud.set_age(age);
stud.set_class(cl);
stud.set_firstname(first_name);
stud.set_lastname(last_name);
cout << stud.get_age() << endl;
cout << stud.get_firstname() << endl;
cout << stud.get_lastname() << endl;
cout << stud.get_class() << endl;
cout << endl << stud.to_string();
}
อินพุต
priyam kundu 16 10
ผลลัพธ์
16 priyam kundu 10 (16, priyam, kundu, 10)