Nạp chồng toán tử input output trong c++ năm 2024

Toán tử subscript [] trong C++ thường được sử dụng để truy cập các phần tử mảng. Toán tử này có thể được nạp chồng để nâng cao tính năng đang tồn tại về mảng trong C++ (do vậy, có thể gọi là toán tử chỉ số mảng).

Ví dụ sau minh họa cách nạp chồng toán tử subscript [] trong C++:


# include 
using namespace std;
const int KICHCO = 15;
class ViDuMang
{
   private:
      int mang[KICHCO];
   public:
      ViDuMang() 
      {
         register int i;
         for(i = 0; i < KICHCO; i++)
         {
           mang[i] = i;
         }
      }
      int &operator[](int i)
      {
          if( i > KICHCO )
          {
              cout << "\n======================\n" <

Biên dịch và chạy chương trình C++ trên sẽ cho kết quả sau:

Nạp chồng toán tử input output trong c++ năm 2024

TỪ KHOÁ FRIEND // các friend nằm được cả trong private và public

include using namespace std; class HinhChuNhat { private: float a, b; public: HinhChuNhat() { } HinhChuNhat(float a, float b) { this->a = a; this->b = b; } friend float DienTich(HinhChuNhat); ~HinhChuNhat() { } }; float DienTich(HinhChuNhat H) //hàm friend không thuộc về class chứa friend { // VD: DienTich không thuộc HinhChuNhat return H.a*H.b; //=>float DienTich(HinhChuNhat H) thay vì float HinhChuNhat::DienTich(HinhChuNhat H) } int main() { HinhChuNhat H(4, 5); cout << "\n Dien Tich: " << DienTich(H);//friend không thể truy cập các thuộc tính của các trực tiếp system("pause"); //=> thông qua object H return 0; } // Phương thức của 1 clas có thể làm friend của 1 class khác class X { public: int function(); }; class Y { private: friend int X::function();// function() của X là friend của Y }; //hàm friend có thể khai báo trong nhiều class

include using namespace std; //fowarding declare: Khai báo trước sử dụng sau. class ConHeo; class ConGa { int khoiluong; friend void LamThit(ConGa, ConHeo); public: ConGa(); ConGa(int a) { khoiluong = a; } }; class ConHeo { int khoiluong; friend void LamThit(ConGa, ConHeo); public: ConHeo(); ConHeo(int a) { khoiluong = a; } }; void LamThit(ConGa ga, ConHeo heo) { ga.khoiluong >= heo.khoiluong ? cout << "lam thit con ga" : cout << "lam thit con heo"; } int main() { ConGa ga(5); ConHeo heo(6); LamThit(ga, heo); system("pause"); return 0; } NẠP CHỒNG TOÁN TỬ - OVERATOR OVERLOADING GETTER - SETTER

include using namespace std; //Toán tử số đối //Cách 1: member function class PhanSo { private: int Tu, Mau; public: //getter: truy cập vào private int GetTu() //int GetTu() const { return Tu; } int GetMau() //int void SetTu(int a) const { return Mau; } //setter: truy cập vào private và cài đặt cho nó //setter void SetTu(int a) { Tu = a; } void SetMau(int b) { Mau = b; } void Xuat() { cout << Tu << "/" << Mau; } PhanSo() {}; PhanSo(int a, int b) { Tu = a; Mau = b; //toán tử - } //cách 2 void operator-(); //cách 1 PhanSo PhanSo::operator-(PhanSo ps); //cách 3 friend PhanSo operator-(int a, PhanSo ps) //Hàm bạn in/output friend istream &operator>>(istream&, PhanSo &); friend ostream &operator<<(ostream&, PhanSo &); //Toán tử so sánh bool operator>(PhanSo); bool operator<=(PhanSo); }; void PhanSo::operator-() { Tu = -Tu; } int main() { PhanSo A(1, 2); A.SetTu(3); A.SetMau(4); cout << A.GetTu << endl; cout << A.GetMau << endl; system("pause"); } //Cách 2: non-member function void operator-(PhanSo &h) { h.SetTu(-h.GetTu()); } int main() { PhanSo A(1, 2); -A; A.Xuat(); system("pause"); } //Hàm bạn PhanSo operator-(int a, PhanSo ps) { PhanSo temp; temp.Tu = a * ps.Mau - ps.Tu; temp.Mau = ps.Mau; return temp; } // non-member function input/output istream &operator>>(istream &input, PhanSo &ps) //istream &operator>>(istream &input,const PhanSo &ps) { int a, b; cout << "\n Nhap tu= "; input >> a; cout << "\n nhap mau= "; input >> b; ps = PhanSo(a, b); return input; } ostream &operator<<(ostream &output, PhanSo ps) //ostream &operator<<(ostream &output,const PhanSo ps) { return output << ps.GetTu() << "/" << ps.GetMau(); } int main() { PhanSo A; cin >> A; cout << A; } // hàm bạn in/output istream &operator >> (istream &input, PhanSo &ps) { cout << "\n Nhap tu= "; input >> ps.Tu; cout << "\n nhap mau= "; input >>ps.Mau; return input; } ostream &operator<<(ostream &output, PhanSo &ps) { return output << ps.Tu << "/" << ps.Mau; } //Tiền Tố class PhanSo { private: int Tu, Mau; public: void Xuat() { cout << Tu << "/" << Mau; } PhanSo() {}; PhanSo(int a, int b) { Tu = a; Mau = b; } PhanSo &operator++() { Tu = Mau + Tu; return *this; // 1 + PhanSo } PhanSo &operator--() { Tu = Tu- Mau; return *this; } }; int main() { PhanSo A(1, 2); A; cout << A; --A; cout << A; } //Hậu Tố PhanSo &operator(int) { PhanSo temp = *this; ++*this; return temp; } PhanSo &operator--(int) { PhanSo temp = *this; --*this; return temp; } //Toán tử so sánh bool PhanSo::operator>(PhanSo ps) { return(Tu / Mau > ps.Tu / ps.Mau); } bool PhanSo::operator<=(PhanSo ps) { return(Tu / Mau <= ps.Tu / ps.Mau); } int main() { PhanSo A(1, 2), C(-1,2); if(A>C) cout<<"\n A>C"; system("pause"); return 0; } Định nghĩa các phép toán +, -, *, /, = =, !=, >, >=, <, <= trên số phức. Định nghĩa phép toán << và >> để xuất và nhập dữ liệu vào số phức.

include using namespace std; class SoPhuc { private: float Thuc, Ao; public: SoPhuc(){} ~SoPhuc(){} SoPhuc(float a, float b) { Thuc = a; Ao = b; } float GetThuc() { return Thuc; } float GetAo() { return Ao; } void SetThuc(float a) { Thuc = a; } void SetAo(float a) { Ao = a; } void Nhap() { cout << "Nhap phan thuc: "; cin >> Thuc; cout << "Nhap Phan ao: "; cin >> Ao; } void Xuat() { cout << Thuc << " + " << Ao << "i"; } SoPhuc operator+(SoPhuc); /*SoPhuc operator-(SoPhuc); SoPhuc operator-();*/ SoPhuc SPlienhop(); friend SoPhuc operator*(SoPhuc sp, SoPhuc sp1); friend SoPhuc operator/(SoPhuc sp, SoPhuc sp1); }; SoPhuc SoPhuc::operator+(SoPhuc sp1) { this->Thuc += sp1.Thuc; this->Ao += sp1.Ao; return *this; } //SoPhuc SoPhuc::operator-(SoPhuc sp) //{ // Thuc = Thuc - sp.Thuc; // Ao = Ao - sp.Ao; // return *this; //} SoPhuc operator-(SoPhuc sp, SoPhuc sp1) { sp.SetThuc(sp.GetThuc() - sp1.GetThuc()); sp.SetAo(sp.GetAo() - sp1.GetAo()); return sp; } //SoPhuc SoPhuc::operator-() //{ // SoPhuc temp; // temp.SetThuc(-temp.GetThuc()); // temp.SetAo(-temp.GetAo()); // return temp; //} SoPhuc SoPhuc::SPlienhop() { this->Ao = -Ao; return *this; } SoPhuc operator*(SoPhuc sp, SoPhuc sp1) { SoPhuc temp; temp.Thuc = sp1.Thuc * sp.Thuc + sp.Ao * sp1.Ao; temp.Ao = sp.Thuc * sp1.Ao + sp.Ao * sp1.Thuc; return temp; } SoPhuc operator/(SoPhuc sp, SoPhuc sp1) { SoPhuc temp; temp.Thuc = (sp1.Thuc*sp.Thuc + sp.Ao*sp1.Ao) / (sp1.Thuc * sp1.Thuc + sp1.Ao * sp1.Ao); temp.Ao = sp1.Thuc * sp1.Thuc + sp1.Ao * sp1.Ao; return temp; } bool operator==(SoPhuc sp, SoPhuc sp1) { if (sp.GetThuc() == sp1.GetThuc() && sp.GetAo()== sp1.GetAo()) return true; return false; } bool operator!=(SoPhuc sp, SoPhuc sp1) { if (sp.GetThuc() != sp1.GetThuc() && sp.GetAo() != sp1.GetAo()) return true; return false; } bool operator>(SoPhuc sp, SoPhuc sp1) { if (sp.GetThuc() > sp1.GetThuc() && sp.GetAo() > sp1.GetAo()) return true; return false; } bool operator>=(SoPhuc sp, SoPhuc sp1) { if (sp.GetThuc() >= sp1.GetThuc() && sp.GetAo() >= sp1.GetAo()) return true; return false; } bool operator<(SoPhuc sp, SoPhuc sp1) { if (sp.GetThuc() < sp1.GetThuc() && sp.GetAo() < sp1.GetAo()) return true; return false; } bool operator<=(SoPhuc sp, SoPhuc sp1) { if (sp.GetThuc() <= sp1.GetThuc() && sp.GetAo() <= sp1.GetAo()) return true; return false; } istream &operator>>(istream &input, SoPhuc &ps) //istream &operator>>(istream &input,const PhanSo &ps) { float a, b; cout << "\n Nhap phan thuc= "; input >> a; cout << "\n nhap phan ao= "; input >> b; ps = SoPhuc(a,b); return input; } ostream &operator<<(ostream &output, SoPhuc ps) //ostream &operator<<(ostream &output,const PhanSo ps) { return output << ps.GetThuc() << " + " << ps.GetAo() << "i"; } int main() { SoPhuc sp1, sp2; cin >> sp1; cout << sp1; sp2.Nhap(); sp1 = sp1 + sp2; sp1.Xuat(); cout << endl; sp2 = sp1 + sp2; sp1.Xuat(); if (sp2 == sp1) cout << "true"; else cout << "false"; system("pause"); return 0; } Định nghĩa lớp CTime biểu diễn khái niệm thời điểm có các thành phần giờ phút giây. Định nghĩa các phép toán +, - (cộng, trừ thêm một số nguyên giây), - (phép trừ hai CTime), ++, -- (thêm bớt một giây). Phép toán <<, >> để xuất, nhập dữ liệu loại CTime.

include using namespace std; class CTime { private: int Gio, Phut, Giay; public: void Input() { do { cout << "Nhap gio: "; cin >> Gio; cout << "Nhap phut: "; cin >> Phut; cout << "Nhap giay: "; cin >> Giay; } while (0 > Gio && 0 > Phut && Phut > 60 && 0 > Giay && Giay > 60); } void output() { cout << Gio << "h" << Phut << "m" << Giay << "s" << endl; } int GetGio() { return Gio; } int GetPhut() { return Phut; } int GetGiay() { return Giay; } void SetGio(int a) { Gio = a; } void SetPhut(int a) { Phut = a; } void SetGiay(int a) { Giay = a; } CTime operator+(int); CTime operator-(int); CTime operator++(); CTime operator--(int); friend istream &operator>>(istream &input, CTime &time); friend ostream &operator<<(ostream &output, CTime & time); }; CTime CTime::operator+(int a) { Giay = Giay + a; if (Giay >= 60) { Giay -= 60; Phut++; } if (Phut >= 60) { Phut -= 60; Gio++; } return *this; } CTime CTime::operator-(int a) { Giay = Giay - a; //Ham tru 1 thoi gian cho 1 giay ra ket qua khong am /*if (Giay < 0 && Gio!=0) { Phut--; if (Phut < 0) { Gio--; Phut += 60; } Giay += 60; } if (Giay < 0 && Gio == 0) { Giay = -Giay; }*/ if (Giay >= 60) { Giay -= 60; Phut++; } if (Phut >= 60) { Phut -= 60; Gio++; } return *this; } CTime operator-(CTime time1, CTime time2) { CTime temp; temp.SetGiay(time1.GetGiay() - time2.GetGiay()); temp.SetPhut(time1.GetPhut() - time2.GetPhut()); temp.SetGio(time1.GetGio() - time2.GetGio()); return temp; } //tien to CTime CTime::operator++() { Giay++; if (Giay >= 60) { Giay -= 60; Phut++; } if (Phut >= 60) { Phut -= 60; Gio++; } return *this; } //hau to CTime CTime::operator--(int a) { Giay--; return *this; } istream &operator>>(istream &input, CTime &time) { cout << "Nhap gio: "; input >> time.Gio; cout << "Nhap phut: "; input >> time.Phut; cout << "nhap giay: "; input >> time.Giay; return input; } ostream &operator<<(ostream &output, CTime & time) { output << time.Gio << "h" << time.Phut << "m" << time.Giay << "s"; cout << endl; return output; } int main() { CTime time, time1, time2; cin >> time1; cout << time1; time1.Input(); time2.Input(); time1 = time1 + 2; time1.output(); time2 = time2 - 2; time2.output(); ++time1; time2--; cout << time1; cout << time2; time1 = time1 - time2; time1.output(); system("pause"); return 0; }