Bài thực hành buổi 3 Môn: Lập Trình Hướng Đối Tượng GV: Lê Thị Thu Lan

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

default Bài thực hành buổi 3 Môn: Lập Trình Hướng Đối Tượng GV: Lê Thị Thu Lan

Bài gửi by augustion_ptn on Wed Sep 21, 2011 7:42 pm

1. Tái định nghĩa các hàm trùng tên nhưng khác nhau về tham số trong một CLASS
Khai báo CLASS ĐIỂM(thuộc tính, phương thức), định nghĩa các hàm (phương thức), tái định nghĩa các hàm trùng tên nhưng khác nhau về tham số.
Truyền thông tin mô tả công việc vào để hiện thị trước khi hiển thị thông tin chi tiết của Điểm.
Code:
#include<stdio.h>
#include<conio.h>
#include<iostream>
using namespace std;
//Khai bao class
class diem
{
      int x;
      int y;
      public:
      diem();  //Khoi tao mot diem khong xac dinh toa do ban dau
      diem(int);//Khoi tao 1 diem xac dinh toa do ban dau x=y
      diem(int, int);//Khoi tao 1 diem xac dinh toa do ban dau x,y
      void hien();//Hien thi thong tin ve mot diem
      void hien(char*);//Hien thi thong tin ve mot diem voi mo ta cong viec do ben ngoai truyen vao
};
//Dinh nghia ham
diem::diem()
{
      x=y=0;
}
diem::diem(int a)
{
      x=y=a;
}
diem::diem(int x1, int y1)
{
      x=x1; y=y1;
}
void diem::hien()
{
      cout<<"("<<x<<","<<y<<")";
}
void diem::hien(char* str)
{
      cout<<str; //Mo ta cong viec
      hien();
}

int main()
{
      diem a; a.hien();
      diem b(5); b.hien();
      diem c(5,6); c.hien();
      a.hien("\nDiem A la: ");
      b.hien("\nDiem B la: ");
      c.hien("\nDiem C la: ");
      getch();
}
2. Giảm nhẹ việc định nghĩa hàm trùng tên bằng khai báo đối số mặc nhiên
Gom Hien() và Hien(char*) của bài trên làm một, xóa bỏ hàm Hien() để tránh lỗi ambiguous
Code:
#include<stdio.h>
#include<conio.h>
#include<iostream>
using namespace std;
//Khai bao class
class diem
{
      int x;
      int y;
      public:
      diem();  //Khoi tao mot diem khong xac dinh toa do ban dau
      diem(int);//Khoi tao 1 diem xac dinh toa do ban dau x=y
      diem(int, int);//Khoi tao 1 diem xac dinh toa do ban dau x,y
//      void hien();//Hien thi thong tin ve mot diem
      void hien(char* = "");//Hien thi thong tin ve mot diem voi mo ta cong viec do ben ngoai truyen vao
};
//Dinh nghia ham
diem::diem()
{
      x=y=0;
}
diem::diem(int a)
{
      x=y=a;
}
diem::diem(int x1, int y1)
{
      x=x1; y=y1;
}
//void diem::hien()
//{
//      cout<<"("<<x<<","<<y<<")";
//}
void diem::hien(char* str)
{
      cout<<str; //Mo ta cong viec
      cout<<"("<<x<<","<<y<<")";
//      hien();
}

int main()
{
      diem a; a.hien();
      diem b(5); b.hien();
      diem c(5,6); c.hien();
      a.hien("\nDiem A la: ");
      b.hien("\nDiem B la: ");
      c.hien("\nDiem C la: ");
      getch();
}
3. Dùng hàm inline để tăng tốc chương trình khi hàm đó có ít lệnh
Thêm từ khóa inline trước hàm thành viên khi khai báo hoặc định nghĩa hàm ngay trong khai báo.
Code:
#include<stdio.h>
#include<conio.h>
#include<iostream>
using namespace std;
class vd
{
      int a;
      public:
        vd(int x){a=x;} //Dinh nghia ngay khai bao
        void in2(){cout<<a;}
        inline vd(); //inline truoc khai bao ham
        inline void in1();
};
inline vd::vd(){a=0;}
inline void vd::in1(){cout<<"\na= "<<a<<endl;}
int main()
{
      vd a(10);
      a.in2();
      vd b;
      b.in1();
      getch();
}
4. Truyền biến đối tượng như đối số của hàm
Truyền trị:
Bổ sung CLASS ĐIỂM, viết lệnh so sánh điểm a có trùng với b không, in ra kết quả.
Code:
//B4_1
#include<stdio.h>
#include<conio.h>
#include<iostream>
using namespace std;
//Khai bao class
class diem
{
      int x;
      int y;
      public:
      diem();  //Khoi tao mot diem khong xac dinh toa do ban dau
      diem(int);//Khoi tao 1 diem xac dinh toa do ban dau x=y
      diem(int, int);//Khoi tao 1 diem xac dinh toa do ban dau x,y
      int trung(diem b);
      void hien(char* = "");//Hien thi thong tin ve mot diem voi mo ta cong viec do ben ngoai truyen vao
};
//Dinh nghia ham
diem::diem()
{
      x=y=0;
}
diem::diem(int a)
{
      x=y=a;
}
diem::diem(int x1, int y1)
{
      x=x1; y=y1;
}
void diem::hien(char* str)
{
      cout<<str; //Mo ta cong viec
      cout<<"("<<x<<","<<y<<")";
}
int diem::trung(diem b)
{
      if(x==b.x&&y==b.y) return 1;
      else return 0;
}
int main()
{
      diem a;
      diem b(1);
      if(a.trung(b)) //so sanh b voi a, b luc nay la mot doi tuong diem dong thoi duoc truyen di nhu mot tham so cua ham trung()
      cout<<"A trung voi B";
      else
      cout<<"A khong trung B";
      getch();
}
Truyền địa chỉ:
Để giảm việc cấp phát vùng nhớ cho tham số, áp dụng cách truyền địa chỉ để tham số của hàm tìm đúng nơi lưu thông tin.
Code:
//B4_2
#include<stdio.h>
#include<conio.h>
#include<iostream>
using namespace std;
//Khai bao class
class diem
{
      int x;
      int y;
      public:
      diem();  //Khoi tao mot diem khong xac dinh toa do ban dau
      diem(int);//Khoi tao 1 diem xac dinh toa do ban dau x=y
      diem(int, int);//Khoi tao 1 diem xac dinh toa do ban dau x,y
      int trung(diem*);
      void hien(char* = "");//Hien thi thong tin ve mot diem voi mo ta cong viec do ben ngoai truyen vao
};
//Dinh nghia ham
diem::diem()
{
      x=y=0;
}
diem::diem(int a)
{
      x=y=a;
}
diem::diem(int x1, int y1)
{
      x=x1; y=y1;
}
void diem::hien(char* str)
{
      cout<<str; //Mo ta cong viec
      cout<<"("<<x<<","<<y<<")";
}
int diem::trung(diem *b)
{
      if(x==b->x&&y==b->y) return 1;//Lay gia tri luu trong vung nho ma b dang giu dia chi
      else return 0;
}
int main()
{
      diem a;
      diem c(1,0);
      if(a.trung(&c)) //Lay dia chio cua c truyen di nhu mot tham so cua ham trung()
      cout<<"A trung voi C";
      else
      cout<<"A khong trung C";
      getch();
}
Truyền tham chiếu:
Tương tự như truyền địa chỉ nhưng cú pháp gần gũi hơn.
Code:
//B4_3
#include<stdio.h>
#include<conio.h>
#include<iostream>
using namespace std;
//Khai bao class
class diem
{
      int x;
      int y;
      public:
      diem();  //Khoi tao mot diem khong xac dinh toa do ban dau
      diem(int);//Khoi tao 1 diem xac dinh toa do ban dau x=y
      diem(int, int);//Khoi tao 1 diem xac dinh toa do ban dau x,y
      int trung(diem &);
      void hien(char* = "");//Hien thi thong tin ve mot diem voi mo ta cong viec do ben ngoai truyen vao
};
//Dinh nghia ham
diem::diem()
{
      x=y=0;
}
diem::diem(int a)
{
      x=y=a;
}
diem::diem(int x1, int y1)
{
      x=x1; y=y1;
}
void diem::hien(char* str)
{
      cout<<str; //Mo ta cong viec
      cout<<"("<<x<<","<<y<<")";
}
int diem::trung(diem &b)
{
      if(x==b.x&&y==b.y)//Su dung nhu truyen tri
      return 1;
      else return 0;
}
int main()
{
      diem a;
      diem b(1);
      diem c(1,0);
      if(a.trung(b)) //Su dung nhu truyen tri
      cout<<"A trung voi B";
      else
      cout<<"A khong trung B";
      getch();
}
5. Giá trị trả về của hàm là một đối tượng
Đối tượng có thể truyền vào hàm như một tham số cũng có thể là giá trị trả về của một hàm
Code:
#include<stdio.h>
#include<conio.h>
#include<iostream>
using namespace std;
    //Khai bao class
class diem
    {
          int x;
          int y;
          public:
          diem();  //Khoi tao mot diem khong xac dinh toa do ban dau
          diem(int);//Khoi tao 1 diem xac dinh toa do ban dau x=y
          diem(int, int);//Khoi tao 1 diem xac dinh toa do ban dau x,y
          int trung(diem &);
          void hien(char* = "");//Hien thi thong tin ve mot diem voi mo ta cong viec do ben ngoai truyen vao
          diem doixung(); //Ket qua tra ve la mot doi tuong diem cu the
    };
    //Dinh nghia ham
diem diem::doixung()
    {
        diem kq;
        kq.x=-x;
        kq.y=-y;
        return kq;
    }
diem::diem()
    {
          x=y=0;
    }
diem::diem(int a)
    {
          x=y=a;
    }
diem::diem(int x1, int y1)
    {
          x=x1; y=y1;
    }
void diem::hien(char* str)
    {
          cout<<str; //Mo ta cong viec
          cout<<"("<<x<<","<<y<<")";
    }
int diem::trung(diem &b)
    {
          if(x==b.x&&y==b.y)//Su dung nhu truyen tri
          return 1;
          else return 0;
    }
int main()
    {
          diem a(10,20);
          diem b=a.doixung();;
          a.hien();cout<<endl;
          b.hien();cout<<endl;
          diem c;
          c=b.doixung();//Diem c phai trung voi a vi c doi xung voi a
          c.hien();
          getch();
    }
6. Dùng con trỏ this
Bài tự làm (tổng hợp):
Dựng một CLASS DIEM trong không gian 3 chiều (x, y, z)
Code:
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<string.h>
using namespace std;
class diem
{
      int x;
      int y;
      int z;
      public:
            //Ham xay dung
            diem();      //Gia tri ban dau x=y=z=0
            diem(int);    //Gia tri ba dau x=y=z=thamsotuyenvao
            diem(int,int,int);//Gia tri ban dau x,y,z
            //Hamf thanh vien
            int trung(diem);    //Kiem tra trung diem
            void hien(char* = "");//In thong tin cua diem
            diem doixung();
};
//Dinh nghia ham
diem::diem()
{
      x=y=z=0;
}
diem::diem(int a)
{
      x=y=z=a;
}
diem::diem(int x1, int y1,int z1)
{
      x=x1; y=y1; z=z1;
}
void diem::hien(char* str)
{
      cout<<str; //Mo ta cong viec
      cout<<"("<<x<<","<<y<<","<<z<<")";
}
int diem::trung(diem b)
{
      if(x==b.x&&y==b.y&&z==b.z) return 1;
      else return 0;
}
diem diem::doixung()
{
      diem kq;
      kq.x=-x;
      kq.y=-y;
      kq.z=-z;
      return kq;
}
int main()
{
      diem a;
      diem b(5);
      diem c(5,6,7);
      a.hien("\nDiem A la: ");
      b.hien("\nDiem B la: ");
      c.hien("\nDiem C la: ");
      if(a.trung(b)) cout<<"\nA trung voi B";
      else cout<<"\nA khong trung voi B";
      (c.doixung()).hien("\nDiem doi xung cua C la: ");
getch();
}
7. Mở rộng bài tập quản lý sinh viên
Cho phép nhập n sinh viên
Code:
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<string.h>
using namespace std;
class sinhvien
{
      private:
              char masv[10];
              char tensv[50];
              int namsinh;
      public:
            void nhap(char* = "");
            void in(char* = "");
};
void sinhvien::nhap(char* str)
{
      cout<<str;
      cout<<"\n Ma sinh vien: ";
      cin>>masv;
      cout<<"\n Ten sinh vien: ";
      cin>>tensv;
      cout<<"\n Nam sinh: ";
      cin>>namsinh;
};
void sinhvien::in(char* str)
{
      cout<<str;
      cout<<"\n"<<masv<<" : "<<tensv<<"(NS: "<<namsinh<<")";
};
int main()
{
      sinhvien dssv[100];
      int slsv;
      cout<<"\n So luong sv can nhap: ";
      cin>>slsv;
      for(int i=0;i<slsv;i++) //Quet tung sinh vien de nhap
      {
            dssv[i].nhap("Thong tin sinh vien moi: ");
      }
      for(int i=0;i<slsv;i++) //Quet tung sinh vien de in
      {
            dssv[i].in();
      }
getch();
}
Bài tự làm:
Bổ sung CLASS Phòng học (mã phòng, tên phòng, số chỗ ngồi).
Cho phép nhập một loạt n phòng phòng học và in danh sách phòng.
Code:
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<string.h>
using namespace std;
class phonghoc
{
      private:
              char maphong[10];
              char tenphong[50];
              int sochongoi;
      public:
            void nhap(char* = "");
            void in(char* = "");
};
void phonghoc::nhap(char* str)
{
      cout<<str;
      cout<<"\n Ma Phong: ";
      cin>>maphong;
      cout<<"\n Ten Phong: ";
      cin>>tenphong;
      cout<<"\n So Cho Ngoi: ";
      cin>>sochongoi;
};
void phonghoc::in(char* str)
{
      cout<<str;
      cout<<"\nMa phong: "<<maphong<<"\nTen Phong: "<<tenphong<<"\nSo cho ngoi: "<<sochongoi;
};
int main()
{
      phonghoc ds[1000];
      int slp;
      cout<<"\n So luong phong can nhap: ";
      cin>>slp;
      for(int i=0;i<slp;i++) //Quet tung phong de nhap
      {
            ds[i].nhap("Thong tin phong moi: ");
      }
      for(int i=0;i<slp;i++) //Quet tung phong de in
      {
            ds[i].in();
      }
getch();
}

augustion_ptn

Posts : 634
Thanked : 100
Gia Nhập 27/08/2010

Tài Sản
Thú nuôi:

http://thanhnhancomputer.freevnn.com

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết