SLIDE1

Showing posts with label lap trinh c. Show all posts
Showing posts with label lap trinh c. Show all posts

Sunday, October 4, 2015

[c/c++] tìm từ dài nhất trong chuỗi

//code c tìm từ dài nhất trong 1 chuỗi ký tự nhập vào

#include"stdio.h"
#include"conio.h"
#include"string.h"
char *max(char *s)    
{
   char c[100], a[100];
   int i, j, k, max = 0;
   i = 0;  
   while (s[i]!='\o')//s[i] không phải là kí tự cuối cùng
   {
       j = 0; 
       if (s[i] != ' ')//nếu ký tự đang xét khác kí tự trắng
   { 
   while (s[i] != '\o')   //lặp với số lần không biết trước nên dùng while
   {//khi kí tự còn khác kí tự trắng
       if (s[i] == ' ') break;   //điều kiền để kết thúc vòng lặp while là gặp kí tự trắng
       c[j] = s[i];//dùng mảng chuổi c để lưu các kí tự thỏa và tăng i,j lên 1 đơn vị
       j++; i++;//trong vòng lặp đã có lệnh i++; rồi nên khi copy xong không cần dùng lệnh i++;
       //để thực hiện vòng lặp nữa
   } 
   c[j] = '\o';           //kí tự cuối cùng phải là kí tự kết thúc để chuổi có nghĩa
   if (max < strlen(c))  //nếu nó là chuổi dài hơn chuỗi max thì gán giá trị cho max
   {//copy chuỗi vào chuỗi a để lưu
       max = strlen(c);
       gets_s(a, c);
   }
}
else i++;  //nếu ban đầu nó là kí tự trắng thì tăng i để tiếp tục lặp
}    
   return a;
}
void main()
{
   char s[255];
   printf("nhap chuoi: "); fflush(stdin); gets_s(s);
   printf("tu dai nhat: %s\n", max(s));
}

Saturday, June 20, 2015

[oop c++] phạm vi truy xuất trong kế thừa

Truy xuất theo chiều dọc:
Hàm thành phần của lớp con có quyền truy xuất các thành phần của lớp cha hay không?
Truy xuất theo chiều ngang:
Các thành phần của lớp cha, sau khi kế thừa xuống lớp con, thì thế giới bên ngoài có quyền truy xuất thông qua đối tượng của lớp con hay không?

[oop c++] Kế thừa - định nghĩa, cú pháp, sử dụng

Kế thừa

 là một đặc điểm của ngôn ngữ dùng để biểu diễn mối quan hệ đặc biệt hóa – tổng quát hóa giữa các lớp. Các lớp được trừu tượng hóa và được tổ chức thành một sơ đồ phân cấp lớp.
Sự kế thừa là một mức cao hơn của trừu tượng hóa, cung cấp một cơ chế gom chung các lớp có liên quan với nhau thành một mức khái quát hóa đặc trưng cho toàn bộ các lớp nói trên.

[oop c++] Quan hệ giữa các lớp đối tượng

Giữa các lớp đối tượng có những loại quan hệ sau:

Quan hệ một một (1-1)
Quan hệ một nhiều (1-n)
Quan hệ nhiều nhiều (n-n)
Quan hệ đặc biệt hóa, tổng quát hóa

Thursday, June 18, 2015

[oop c++] Các nguyên tắc xây dựng lớp


  1. Hình thành lớp: Khi ta nghĩ đến “nó” như một khái niệm riêng lẻ ->Xây dựng lớp biểu diễn khái niệm đó.
  2. Lớp là biểu diễn cụ thể của một khái niệm vì vậy tên lớp luôn là danh từ.
  3. Các thuộc tính của lớp là các thành phần dữ liệu nên chúng luôn là danh từ.
  4. Các hàm thành phần (các hành vi) là các thao tác chỉ rõ hoạt động của lớp nên các hàm là động từ.
  5. Các thuộc tính có thể suy diễn từ những thuộc tính khác thì dùng hàm thành phần để thực hiện tính toán. Ví dụ chu vi, diện tích của một tam giác
  6. Tuy nhiên, nếu các thuộc tính suy diễn dòi hỏi nhiều tài nguyên hoặc thời gian để thực hiện tính toán, ta có thể khai báo là dữ liệu thành phần.
  7. Dữ liệu thành phần nên được kết hợp:
  8. Trong mọi trường hợp, nên có phương thức thiết lập (Constructor) để khởi động đối tượng
  9. Nên có phương thức thiết lập có khả năng tự khởi động không cần tham số
  10. Nếu đối tượng có nhu cầu cấp phát tài nguyên thì phải có phương thức thiết lập, copy constructor để khởi động đối tượng bằng đối tượng cùng kiểu và có destructor để dọn dẹp. Ngoài ra còn có phép gán (chương 4).
  11. Nếu đối tượng đơn giản không cần tài nguyên riêng ->Không cần copy constructor và destructor


[oop c++] Thành viên tĩnh – static member

Trong C, static xuất hiện trước dữ liệu được khai báo trong một hàm nào đó thì giá trị của dữ liệu đó vẫn được lưu lại như một biến toàn cục.
Trong C++, nếu static xuất hiện trước một dữ liệu hoặc một phương thức của lớp thì giá trị của nó vẫn được lưu lại và có ý nghĩa cho đối tượng khác của cùng lớp này.
Các thành viên static có thể là public, private hoặc protected.

Đối với class, static dùng để khai báo thành viên dữ liệu dùng chung cho mọi thể hiện của lớp:

Một bản duy nhất tồn tại trong suốt quá trình chạy của chương trình.
Dùng chung cho tất cả các thể hiện của lớp.
Bất kể lớp đó có bao nhiêu thể hiện.

Ví dụ
class Rectangle
{
    private:
       int width;
       int length;
       static int count;
    public:
       void set(int w, int l);
       int area();
}

Ví dụ
Đếm số đối tượng MyClass:
class MyClass{
    public:
        MyClass();
        ~MyClass();
        void printCount();
    private:
        static int count;
};

int MyClass::count = 0;
MyClass::MyClass(){
    this -> count++;
}
MyClass::~MyClass(){
    this -> count--;
}
void MyClass::printCount(){
    cout << “There are currently ” << this  count << “ instance(s) of MyClass.\n”;
}
void main()
{
    MyClass* x = new MyClass;
    x -> printCount();
    MyClass* y = new MyClass;
     x -> printCount();
     y -> printCount();
    delete x;
     y -> printCount();
}


Phương thức static?

Đối với các phương thức static, ngoài ý nghĩa tương tự với dữ liệu, còn có sự khác biệt cơ bản đó là việc cho phép truy cập đến các phương thức static khi chưa khai báo đối tượng (thông qua tên lớp)
Các thành viên lớp tĩnh public có thể được truy cập thông qua bất kỳ đối tượng nào của lớp đó, hoặc chúng có thể được truy cập thông qua tên lớp sử dụng toán tử định phạm vi.
Các thành viên lớp tĩnh private và protected phải được truy cập thông qua các hàm thành viên public của lớp hoặc thông qua các friend của lớp.
Các thành viên lớp tĩnh tồn tại ngay cả khi đối tượng của lớp đó không tồn tại.
Để truy cập một thành viên lớp tĩnh public khi các đối tượng của lớp không tồn tại, đơn giản thêm vào đầu tên lớp và toán tử định phạm vi cho thành viên dữ liệu.
Để truy cập một thành viên lớp tĩnh private hoặc protected khi các đối tượng của lớp không tồn tại, một hàm thành viên public phải được cung cấp và hàm phải được gọi bởi thêm vào đầu tên của nó với tên lớp và toán tử định phạm vi.

[oop c++] hàm bạn, lớp bạn (friend function)

Hàm bạn, lớp bạn (Friend function)


Giả sử có lớp Vector, lớp Matrix
Cần viết hàm nhân Vector với một Matrix
Hàm nhân:
Không thể thuộc lớp Vector
Không thể thuộc lớp Matrix
Không thể tự do
Giải pháp: Xây dựng hàm truy cập dữ liệu?
Hàm bạn không thuộc lớp. Tuy nhiên, có quyền truy cập các thành viên private của lớp.
Khi định nghĩa một lớp, có thể khai báo một hay nhiều hàm “bạn” (bên ngoài lớp)
Ưu điểm:
Kiểm soát các truy nhập ở cấp độ lớp – không thể áp đặt hàm bạn cho lớp nếu điều đó không được dự trù trước trong khai báo của lớp.
Dùng từ khóa friend để khai báo, định nghĩa hàm bạn
Đây là cách cho phép chia sẻ dữ liệu giữa các đối tượng với một hàm tùy ý trong chương trình (hàm friend) hoặc chia sẻ các thành phần của đối tượng có thuộc tính private hay protected với các đối tượng khác (lớp friend).
Các tính chất của quan hệ friend:
Phải được cho, không được nhận
Lớp B là bạn của lớp A, lớp A phải khai báo rõ ràng B là bạn của nó
Không đối xứng, Không bắc cầu
Quan hệ friend có vẻ như vi phạm khái niệm đóng gói (encapsulation) của OOP nhưng có khi lại cần đến nó để cài đặt các mối quan hệ giữa các lớp và khả năng đa năng hóa toán tử trên lớp (sẽ đề cập ở chương sau)

Ví dụ
class COUNTERCLASS{
    int Counter;
public:
    char CounterChar;
    void Init( char );
    void AddOne( ){
        Counter++;
    }
    friend int Total (int);
};
COUNTERCLASS MyCounter[26];     //Có 26 đối tượng
int Total(int NumberObjects)
{
    for (int i=0, sum=0; i<NumberObjects; i++)
        sum += MyCounter[i].Counter
        //Tính tổng số ký tự trong số các Objects ký tự
    return sum;
}

Lưu ý:
Vị trí của khai báo “bạn bè” trong lớp hoàn toàn tùy ý
Trong hàm bạn, không còn tham số ngầm định this như trong hàm thành phần
Hàm bạn của một lớp có thể có một hay nhiều tham số, hoặc có thể có giá trị trả về thuộc kiểu lớp đó
Một lớp có thể truy cập đến các thành phần có thuộc tính private của một lớp khác.
Để thực hiện được điều này, chúng ta có thể lấy toàn bộ một lớp làm bạn (lớp friend) cho lớp khác.

Ví dụ
class TOM{
public:
    friend class JERRY;     //Có lớp bạn là JERRY
private:
    int SecretTom;      //Bí mật của TOM
};
class JERRY{
public:
    void Change(TOM T){
        T.SecretTom++;  //Bạn nên có thể truy cập
    }
};

Wednesday, June 17, 2015

[oop c++] hàm thiết lập constructor, hủy bỏ destructor

Trong hầu hết các thuật giải, để giải quyết một vấn đề thường phải thực hiện các công việc:
Khởi tạo giá trị cho biến, cấp phát vùng bộ nhớ của biến con trỏ, mở tập tin để truy cập,…
Hoặc khi kết thúc, chúng ta phải thực hiện quá trình ngược lại như: Thu hồi vùng bộ nhớ đã cấp phát, đóng tập tin,…
Các ngôn ngữ OOP có các phương thức để thực hiện công việc này một cách “tự động” gọi là phương thức thiết lập và phương thức hủy bỏ.

Constructor 

[oop c++] con trỏ this và phép gán đối tượng

Con trỏ this


Từ khoá this trong định nghĩa của các hàm thành phần lớp dùng để xác định địa chỉ của đối tượng dùng làm tham số ngầm định cho hàm thành phần.
Con trỏ this tham chiếu đến đối tượng đang gọi hàm thành phần.
Ví dụ:
int Trung(point pt){
return (this -> x == pt.x && this -> y == pt.y);
}

Phép gán đối tượng

Là việc sao chép giá trị các thành phần dữ liệu từ đối tượng a sang đối tượng b tương ứng từng đôi một
Ví dụ:
point a, b;
a.init(5,2);
b = a;

[OOP C++] Phạm Vi Truy Xuất Thành Phần Đối Tượng

Trong định nghĩa của lớp ta có thể xác định khả năng truy xuất thành phần của một lớp nào đó từ bên ngoài phạm vi lớp.
private, protected và public là các từ khoá xác định phạm vi truy xuất
Mọi thành phần được liệt kê trong phần public đều có thể truy xuất trong bất kỳ hàm nào.
Những thành phần được liệt kê trong phần private chỉ được truy xuất bên trong phạm vi lớp.
Trong lớp có thể có nhiều nhãn private và public
Mỗi nhãn này có phạm vi ảnh hưởng cho đến khi gặp một nhãn kế tiếp hoặc hết khai báo lớp.
Nhãn private đầu tiên có thể bỏ qua vì C++ ngầm hiểu rằng các thành phần trước nhãn public đầu tiên là private.

Tuesday, June 16, 2015

Viết chương trình nhập số thực a từ bàn phím và tìm số tự nhiên n nhỏ nhất sao cho: 1 + 1/2 + 1/3 +…+ 1/n > a Với số n tìm được hãy tính tổng vế trái.

chuong trinh c:
/*
Viết chương trình nhập số thực a từ bàn phím và tìm số tự nhiên n nhỏ nhất sao cho:
1 + 1/2 + 1/3 +…+ 1/n > a Với số n tìm được hãy tính tổng vế trái.
*/
#include<stdio.h>
#include<conio.h>
int main()
{
    float a,t;
    int n,i;
    printf("a=");
    scanf("%f",&a);
    t=0;i=0;
    while(t<=a)
    {
        i++;
        t+=float(1)/float(i);
    }
    printf("N = %d\ntong vt = %f",i,t);
    getch();
    return 0;
}

Monday, June 15, 2015

[C/C++] nhập vào họ và tên, in ra tên

viết chương trình [C/C++] nhập vào họ và tên, sau đó xử lý chuỗi và in ra tên của người đó.
#include<stdio.h>
#include<string.h>
#include<conio.h>
int main()
{
    char s[100];
    printf("ho ten:");
    fflush(stdin);
    gets(s);
    char a[100];
    char c;
    int j=0;
    for(int i=strlen(s)-1;i>=0 && s[i]!=' ';i--) a[j++]=s[i];
    a[j]='\0';
    for(int i=0;i<strlen(a)/2;i++)
    {
        c=a[i];
        a[i]=a[strlen(a)-1-i];
        a[strlen(a)-1-i]=c;
    }
    printf("ten: %s",a);
    getch();
    return 0;
}

Wednesday, June 10, 2015

[C/C++] chương trình quản lý sách

Viết chương trình quản lí sách. Mỗi cuốn sách gồm tên sách, tên nhà xuất bản, năm xuất bản, giá tiền, số lượng:
a. Đưa ra danh sách các cuốn sách của nhà xuất bản Giáo dục.
b. Tính tổng số tiền sách.
c. Sắp xếp danh sách giảm theo năm xuất bản và in kết quả ra màn hình.
d. In ra màn hình các cuốn sách có giá tiền<=10.000đ và xuất bản sau năm 2006.

#include<iostream>
#include<string>
using namespace std;
struct sach
{
    string ten,nxb;
    int nam,soluong;
    long long gia;
};
void nhap(sach *l,int n)
{
    for(int i=0;i<n;i++)
    {
        cout<<"\nnhap sach thu "<<i+1<<endl;
        cout<<"ten sach:";fflush(stdin);getline(cin,l[i].ten);
        cout<<"ten nha xuat ban :";fflush(stdin);getline(cin,l[i].nxb);
        cout<<"nam :";cin>>l[i].nam;
        cout<<"so luong:";cin>>l[i].soluong;
        cout<<"gia:";cin>>l[i].gia;
    }
}
void xuatnxbgiaoduc(sach *l,int n)
{
    for(int i=0;i<n;i++)
        if(l[i].nxb=="giao duc") cout<<l[i].ten<<endl;
}
long long tongtien(sach *l,int n)
{
    long long tong=0;
    for(int i=0;i<n;i++) tong+=l[i].gia;
    return tong;
}
void sapxep(sach *l,int n)
{
    for(int i=0;i<n-1;i++)
        for(int j=i+1;j<n;j++)
            if(l[i].nam < l[j].nam) swap(l[i],l[j]);
    for(int i=0;i<n;i++) cout<<l[i].ten<<endl;
}
void xuattien10(sach *l,int n)
{
    for(int i=0;i<n;i++)
        if(l[i].nam >= 2006 && l[i].gia<=10000) cout<<l[i].ten<<endl;
}
void main()
{
    sach l[100];
    int n;
    cout<<"nhap so loai sach:";cin>>n;
    nhap(l,n);
    cout<<"\ncac loai sach nha xuat ban giao duc\n";
    xuatnxbgiaoduc(l,n);
    cout<<"\ntong so tien sach = "<<tongtien(l,n);
    cout<<"\ndanh sach giam theo nam xuat ban\n";
    sapxep(l,n);
    cout<<"\ncac sach sau 2006 va tien <=10.000\n";
    xuattien10(l,n);
    system("pause");
}

[C/C++] quản lý điểm của lớp học

Viết chương trình quản lý điểm của một lớp học gồm có các chức năng sau:
a. Nhập hồ sơ của một sinh viên gồm có: Họ và tên, năm sinh, điểm trung bình học kỳ 1 và điểm trung bình học kỳ 2.
b. In danh sách các học sinh của lớp có điểm trung bình cả năm từ 5 điểm trở lên và theo thứ tự giảm dần của điểm trung bình cả năm.
c. In danh sách các học sinh phải thi lại (điểm trung bình dưới 5).
#include<iostream>
#include<string>
using namespace std;
struct sinhvien
{
    string ten;
    int nam;
    float dtb1,dtb2;
};
void main()
{
    sinhvien list[100];
    int n;
    cout<<"\nnhap so luong sinh vien N=";cin>>n;
    for(int i=0;i<n;i++)
    {
        cout<<"\nNhap sinh vien thu "<<i+1<<endl;
        cout<<"\nho ten:";fflush(stdin);getline(cin,list[i].ten);
        cout<<"nam sinh:";cin>>list[i].nam;
        cout<<"diem trung binh hk1:";cin>>list[i].dtb1;
        cout<<"diem trung binh hk2:";cin>>list[i].dtb2;
    }
    ///sap xep giam dan
    for(int i=0;i<n-1;i++)
        for(int j=i+1;j<n;j++)
            if((list[i].dtb1+list[i].dtb2)/2 < (list[j].dtb1+list[j].dtb2)/2) swap(list[i],list[j]);
    //xuat
    cout<<"danh sach >=5\n";
    for(int i=0;i<n;i++)
        if((list[i].dtb1+list[i].dtb2)/2 >=5) cout<<list[i].ten<<endl;
    cout<<"danh sach thi lai\n";
    for(int i=0;i<n;i++)
        if((list[i].dtb1+list[i].dtb2)/2 <5) cout<<list[i].ten<<endl;
    system("pause");
}

Tuesday, June 2, 2015

thao tác file với thư viện fstream

Để sử dụng được thư viện fstream, ta phải include thư viện fstream và using namespace std;

#include <fstream>
using namespace std;
Điều đầu tiên, ta tạo ra một đối tượng fstream. Ta sẽ thao tác với file thông qua đối tượng đó.

fstream f;
Để mở một file, ta dùng phương thức open sau:

f.open(filePath, mod);
Trong đó:

filePath có kiểu dữ liệu là const char*, là đường dẫn đến file cần mở.
mod là chế độ mở file. Chúng ta có một số chế độ như sau:
ios::in Mở file để đọc.
ios::out Mở file có sẵn để ghi
ios::binary Mở file ở chế độ nhị phân.
ios:ate Mở file và đặt con trỏ file vào cuối file.
ios::app Mở file và ghi dữ liệu vào cuối file. Nếu file không tồn tại thì tạo file mới.
ios::trunc Chế độ mở file, xóa bỏ hoàn toàn nội dung trong file được mở.

Sunday, May 31, 2015

[C/C++] lập trình giải mã mật thư Cesar

Cho một đoạn mật thư đã được mã hóa thành những chuỗi kí tự 0,1 với mỗi 5 kí tự số sẽ tương ứng với một kí tự trong bảng chữ cái alphabel. Thứ tự bảng mã sẽ giống với bảng chữ cái alphabel (Ví dụ a=00001 thì z=11010,a=01001 thì z=00001). Độ dịch của bảng sẽ là một số ngẫu nhiên từ 1 đến 100, bạn phải tìm ra để có được bảng mã đúng
Ví dụ: với a=00001
01111011001100101101100000100100001 0100110100 sẽ được giải mã là “olympia it”

000110000110101 011000000100011 0001001111 000111000010100sẽ được giải mã là “cau lac bo cpt”
Input: file1.inp
Đoạn mật thư tối đa 100000 kí tự
Output: file1.out

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
char dich(string s,int i)
{
    if(s=="00000") return 97-i;
    if(s=="00001") return 98-i;
    if(s=="00010") return 99-i;
    if(s=="00011") return 100-i;
    if(s=="00100") return 101-i;
    if(s=="00101") return 102-i;
    if(s=="00110") return 103-i;
    if(s=="00111") return 104-i;
    if(s=="01000") return 105-i;
    if(s=="01001") return 106-i;
    if(s=="01010") return 107-i;
    if(s=="01011") return 108-i;
    if(s=="01100") return 109-i;
    if(s=="01101") return 110-i;
    if(s=="01110") return 111-i;
    if(s=="01111") return 112-i;
    if(s=="10000") return 113-i;
    if(s=="10001") return 114-i;
    if(s=="10010") return 115-i;
    if(s=="10011") return 116-i;
    if(s=="10100") return 117-i;
    if(s=="10101") return 118-i;
    if(s=="10110") return 119-i;
    if(s=="10111") return 120-i;
    if(s=="11000") return 121-i;
    if(s=="11001") return 122-i;
    if(s=="11010") return 123-i;
    if(s=="11011") return 124-i;
    if(s=="11100") return 125-i;
    if(s=="11101") return 126-i;
    if(s=="11110") return 127-i;
    if(s=="11111") return 128-i;
    return 48;
}
void main()
{
    fstream t("file1.inp",ios::in);
    fstream f("file1.out",ios::out);
    string s,c;
    char a;
    int i,j;
    for(int k=1;k<100;k++)
    {
        while(!t.eof())
        {
            getline(t,s);
            i=0;
            while(i<s.size())
            {
                c=s.substr(i,5);
                i+=5;
                a=dich(c,k);
                f<<a;
                if(s[i]==' ')
                {
                    i++;
                    f<<" ";
                }
            }
            f<<endl;
        }
        f<<endl;
        t.clear();
        t.seekg(0,ios::beg);
    }
    t.close();
    system("pause");
}

Friday, May 29, 2015

[opp c++] nhập xuất điểm trong tọa độ oxy

lâp trình oop c++ định nghĩa và nhập xuất điểm trong tọa độ oxy , định nghĩa lớp điểm theo hướng đối tượng c++.nhập xuất nạp chồng toán tử

Tuesday, May 26, 2015

class MYINT định nghĩa kiểu dữ liệu giống int c/c++

lập trình oop c++ định nghĩa lớp MYINT có hoạt động như kiểu dữ liệu 'int' nhưng phép cộng hai MYINT hoạt động như phép trừ hai int và ngược lại.
MYINT.h
#pragma once
#include<iostream>
using namespace std;
class MYINT
{
private:
    float x;
public:
    MYINT(void);
    ~MYINT(void);
    friend ostream &operator<<(ostream &out,const MYINT&); 
    friend istream &operator>>(istream &in,MYINT&);
    MYINT operator+(const MYINT&);
    MYINT operator-(const MYINT&);
    MYINT operator*(const MYINT&);
    MYINT operator/(const MYINT&);
    void operator++();
    void operator--();
};


MYINT.cpp
#include "MYINT.h"
MYINT::MYINT(void)
{
}
MYINT::~MYINT(void)
{
}
ostream &operator<<(ostream &out,const MYINT &a)
{
    out<<a.x;
    return out;
}
istream &operator>>(istream &in,MYINT &a)
{
    in>>a.x;
    return in;
}
MYINT MYINT::operator+(const MYINT &a)
{
    MYINT z;
    z.x=this->x-a.x;
    return z;
}
MYINT MYINT::operator-(const MYINT &a)
{
    MYINT z;
    z.x=this->x+a.x;
    return z;
}
MYINT MYINT::operator*(const MYINT &a)
{
    MYINT z;
    z.x=this->x*a.x;
    return z;
}
MYINT MYINT::operator/(const MYINT &a)
{
    MYINT z;
    z.x=this->x/a.x;
    return z;
}
void MYINT::operator++()
{
    x++;
}
void MYINT::operator--()
{
    x--;
}
main.cpp
#include"MYINT.h"
void main()
{
    MYINT x,y;
    cin>>x>>y;
    cout<<x+y<<endl;
    cout<<x-y<<endl;
    system("pause");
}

class INTEGER định nghĩa kiểu dữ liệu giống int của C/C++

lập trình oop c++ định nghĩa lớp INTEGER có thể hoạt động như để mỗi INTEGER giống hệt như một 'int' của ngôn ngữ C/C++.(tự định nghĩa lại kiểu dữ liệu int)
INTEGER.h
#pragma once
#include<iostream>
using namespace std;
class INTEGER
{
private:
    float x;
public:
    INTEGER(void);
    ~INTEGER(void);
    friend ostream &operator<<(ostream &out,const INTEGER&); 
    friend istream &operator>>(istream &in,INTEGER&);
    INTEGER operator+(const INTEGER&);
    INTEGER operator-(const INTEGER&);
    INTEGER operator*(const INTEGER&);
    INTEGER operator/(const INTEGER&);
    void operator++();
    void operator--();
};


INTEGER.cpp
#include "INTEGER.h"
INTEGER::INTEGER(void)
{
}
INTEGER::~INTEGER(void)
{
}
ostream &operator<<(ostream &out,const INTEGER &a)
{
    out<<a.x;
    return out;
}
istream &operator>>(istream &in,INTEGER &a)
{
    in>>a.x;
    return in;
}
INTEGER INTEGER::operator+(const INTEGER &a)
{
    INTEGER z;
    z.x=this->x+a.x;
    return z;
}
INTEGER INTEGER::operator-(const INTEGER &a)
{
    INTEGER z;
    z.x=this->x-a.x;
    return z;
}
INTEGER INTEGER::operator*(const INTEGER &a)
{
    INTEGER z;
    z.x=this->x*a.x;
    return z;
}
INTEGER INTEGER::operator/(const INTEGER &a)
{
    INTEGER z;
    z.x=this->x/a.x;
    return z;
}
void INTEGER::operator++()
{
    x++;
}
void INTEGER::operator--()
{
    x--;
}
main.cpp
#include"INTEGER.h"
void main()
{
    INTEGER x,y;
    cin>>x>>y;
    cout<<x+y<<endl;
    cout<<x-y<<endl;
    cout<<x*y<<endl;
    cout<<x/y<<endl;
    x++;y--;
    cout<<x<<" "<<y;
    system("pause");
}

class CString biểu diễn khái niệm chuỗi ký tự

Hãy định nghĩa lớp CString biểu diễn khái niệm chuỗi ký tự với các phương thức thiết lập, huỷ bỏ, các hàm thành phần và các phép toán cần thiết (+, gán, so sánh hai chuỗi).
cstring.h
#pragma once
#include<iostream>
#include<string>
using namespace std;
class cstring
{
private:
    string s;
public:
    cstring();
    ~cstring();
    friend ostream &operator<<(ostream &out,const cstring &a);
    friend istream &operator>>(istream &in,cstring &a);
    cstring operator+(const cstring &a);
    void operator=(const cstring &a);
    bool operator<(const cstring &a);
    bool operator<=(const cstring &a);
    bool operator>(const cstring &a);
    bool operator>=(const cstring &a);
    bool operator==(const cstring &a);
    bool operator!=(const cstring &a);
};
cstring.cpp
#include"cstring.h"
cstring::cstring()
{
}
cstring::~cstring()
{
}
ostream &operator<<(ostream &out,const cstring &a)
{
    out<<a.s;
    return out;
}
istream &operator>>(istream &in,cstring &a)
{
    getline(in,a.s);
    return in;
}
cstring cstring::operator+(const cstring &a)
{
    cstring z;
    z.s=s;
    z.s+=a.s;
    return z;
}
void cstring::operator=(const cstring &a)
{
    s=a.s;
}
bool cstring::operator<(const cstring &a)
{
    if(s<a.s) return true;
    return false;
}
bool cstring::operator<=(const cstring &a)
{
    if(s<=a.s) return true;
    return false;
}
bool cstring::operator>(const cstring &a)
{
    if(s>a.s) return true;
    return false;
}
bool cstring::operator>=(const cstring &a)
{
    if(s>=a.s) return true;
    return false;
}
bool cstring::operator==(const cstring &a)
{
    if(s==a.s) return true;
    return false;
}
bool cstring::operator!=(const cstring &a)
{
    if(s!=a.s) return true;
    return false;
}
main.cpp
#include"cstring.h"
void main()
{
    cstring s,x;
    cin>>s>>x;
    if(s>x) cout<<"OK";
    system("pause");
}