Tải bản đầy đủ (.ppt) (34 trang)

Tài liệu lập trình C tiếng Việt Lesson3 class and object

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (199.49 KB, 34 trang )

Lập trình hướng đối tượng
Bài 3: Đối tượng và lớp


Nội dung


Đối tượng



Lớp



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



Thiết lập và hủy bỏ



Dữ liệu và hàm tĩnh



Hằng số




Hàm bạn và lớp bạn

2


Đối tượng
Object = Data + Method
Point object {
// data
int x,y;
//method
void init (int ox, int oy);
void move (int dx, int dy);
void display();
};
3


Lớp


Khai báo lớp

class <class name>{
private:

public:

};

defined inside class declaration >
#include <iostream>
#include <conio>
class point{
private:
4


int x,y;
public:
void init(int ox, int oy);
void move(int dx, int dy);
void display();
};
// Define component function outside declaration
void point::init(int ox, int oy){
cout<<“init function\n”;
x=ox; y=oy;
}
void point::move(int dx, int dy){
cout<<“move function\n”;
x+=dx; y+=dy;
}
5


void point::display(){
cout<<“display function\n”;
cout<<“coordinate: ”<}

void main(){
point p;
p.init(2,4); p.display();
p.move(1,2); p.display();
}
init function
display function
coordinate: 2 4
move function
display function
coordinate: 3 6
6


Lớp


Tạo đối tượng

<class name> <object name>;
Data frame

Object
Data of object 1

Object
Data of object 2

7



Lớp
 Dữ liệu thành phần
Cú pháp khai báo dữ liệu thành phần tương tự như khai báo biến
<type> <data component name>;

 Hàm thành phần
Có thể định nghĩa trong hoặc ngoài khai báo lớp
class point{
private:
int x,y;
public:
void init(int ox, int oy){
cout<<“init function\n”;
x=ox; y=oy;
}
void move(int dx, int dy);
void display();
}; // inside defined functions are inline function
8


Lớp


Con trỏ this trong hàm thành phần

Con trỏ this là con trỏ trỏ tới chính đối tượng đang gọi hàm
thành phần
void point::init(int x, int y){

cout<<“init function\n”;
this->x=x;
this->y=y;
}


Phạm vi lớp

9


Lớp


Thuộc tính truy cập
 private
 public

class triangle{
private:
float a,b,c;
public:
void input();
void print();
private:
int triangletype();
float area();
};




Gọi hàm thành phần khác từ hàm thành phần
10


Lớp


Định nghĩa chồng hàm thành phần
point::init();
point::init(int abs);
point::init(int a, int b);
point::init(int a=0, int b=0);



Tham số là đối tượng
int point::coincide (point pt)
{ return (x==pt->x && y==pt->y); }



Giá trị trả ra là đối tượng
point point::symmetry (){
point res; res.x=-x; res.y=-y;
return res;
}
11



Phép gán đối tượng
point a,b;
a.init(5,2);
b=a;

a

b

x

5

5

x

y

2

2

y

x

5

5


x

y

2

2

y

Dynamic data
12


Thiết lập và hủy bỏ


Phương thức thiết lập

Phương thức thiết lập là hàm đặc biệt mà được
gọi tự động khi đối tượng được tạo.
class point{
int x,y;
public:
point(int ox, int oy){x=ox; y=oy;}
void move(int dx,int dy);
void display();
};
void point::move(int dx, int dy){x+=dx; y+=dy}

void point::display(){cout<<“coordinate: ”<13


Thiết lập và hủy bỏ


Các yêu cầu đối với phương thức thiết lập






Tên giống tên lớp
Thuộc tính truy cập public
Không có giá trị trả ra (kể cả void)
Có thể viết chồng
class point{
int x,y;
public:
point() {x=0; y=0;}
point(int ox, int oy) {x=ox; y=oy;}
void move(int, int);
void display();
};
14


Thiết lập và hủy bỏ



Phương thức thiết lập mặc định

Không định nghĩa
 Định nghĩa với không tham số
 Định nghĩa hàm với tất cả các tham số là
tham số mặc định


point a[10];
point *ptr;
point p(1,2);
ptr= new point(3,4);
point &r=p;

15


Thiết lập và hủy bỏ


Phương thức hủy bỏ

Phương thức hủy bỏ là hàm đặc biệt mà được
gọi tự động khi đối tượng được giải phóng.
class point{
int x,y;
public:
point(int ox, int oy){x=ox; y=oy;}

void move(int dx,int dy);
void display();
~point(){cout<<“releasing object./n”}
};
void point::move(int dx, int dy){x+=dx; y+=dy}
void point::display(){cout<<“coordinate: ”<16


Thiết lập và hủy bỏ


Các yêu cầu đối với phương thức hủy bỏ:

 Tên

bắt đầu với ~, theo sau là tên lớp
 Thuộc tính truy cập public
 Không tham số
 Không giá trị trả ra


Nếu lớp không định nghĩa phương thức hủy bỏ, trình biên dịch sẽ
tạo một phương thức hủy bỏ mặc định.

17


Phương thức hủy bỏ cho lớp vector
#include <iostream.h>

class vector{
int n;
float *v;
public:
vector();
vector(int size);
~vector();
};
vector::vector(){
n=10;
v=new float[n];
}

vector::vector(int size){
n=size;
v=new float[n];
}
vector::~vector(){
delete [] v;
}

18


Thiết lập copy


Thí dụ về thiết lập copy
int p;
int x=p;

point p(2,3);
point q=p;



Phép gán đối tượng
point p(2,3);
point q;
q=p;



Thiết lập copy mặc định
19


Khai báo thiết lập copy
point (point &); or point (const point &);
// do not declare point (point);
class point{
int x,y;
public:
point(int ox=1, int oy=0){ //constructor
cout<<“Create object: ”<cout<<“Two paramenters constructor.\n”;
x=ox; y=oy;
}
point (point &p){
cout<<“Create object: ”<cout<<“Copy constructor.\n”;

x=p.x; y=p.y;
}
20


Thiết lập copy
void move(int dx,int dy);
void display();
};
void point::move(int dx, int dy){x+=dx; y+=dy}
void point::display(){cout<<“Coordinate: ”<point fct(point a){
point b=a;
b.move(2,3);
return b;

}
void main{
point a(5,2); a.dislay();
point b=fct(a); b.display();

}

21


Thiết lập copy
Create object: 0xfff2
Two parameters constructor.
Coordinate: 5 2

Create object:0xffea
Copy constructor.
Create object:0xffde
Copy constructor.
Create object:0xffee
Copy constructor.
Coordinate: 7 5

22


Các thành phần tĩnh


Dữ liệu tĩnh
 Thông

thường đối tượng sở hữu dữ liệu của nó

class exple1{
int n;
float x;
...

};
exple1 a,b;

a.n

b.n


a.x

b.x
23


Các thành phần tĩnh
class exple2{
static int n;
float x;
...

};
exple2 a,b;

a.n

b.n

a.x

b.x

24


Khởi tạo dữ liệu tĩnh
int exple::n=5;
class exple2{

static int n=2; //error
};



Thí dụ
#include <iostream.h>
class counter{
static int count;
public:
count();
~count();

};
25


×