Giá 10k/ 5 lượt tải liên hệ page để mua https://www.facebook.com/garmentspace
Chỉ với 10k THẺ CÀO VIETTEL bạn có ngay 5 lượt download tài liệu bất kỳ do Garment Space upload, hoặc với 100k THẺ CÀO VIETTEL bạn được truy cập kho tài liệu chuyên ngành vô cùng phong phú
Liên hệ: www.facebook.com/garmentspace
Nhận viết luận văn Đại học , thạc sĩ - Zalo: 0917.193.864
Tham khảo bảng giá dịch vụ viết bài tại: vietbaocaothuctap.net
Download luận văn đồ án tốt nghiệp ngành điện công nghiệp với đề tài: Nghiên cứu hệ thống điều khiển quá trình khoan 2 giai đoạn ứng dụng điều khiển bằng PLC S7-200, cho các bạn tham khảo
Giá 10k/ 5 lượt tải liên hệ page để mua https://www.facebook.com/garmentspace
Chỉ với 10k THẺ CÀO VIETTEL bạn có ngay 5 lượt download tài liệu bất kỳ do Garment Space upload, hoặc với 100k THẺ CÀO VIETTEL bạn được truy cập kho tài liệu chuyên ngành vô cùng phong phú
Liên hệ: www.facebook.com/garmentspace
Nhận viết luận văn Đại học , thạc sĩ - Zalo: 0917.193.864
Tham khảo bảng giá dịch vụ viết bài tại: vietbaocaothuctap.net
Download luận văn đồ án tốt nghiệp ngành điện công nghiệp với đề tài: Nghiên cứu hệ thống điều khiển quá trình khoan 2 giai đoạn ứng dụng điều khiển bằng PLC S7-200, cho các bạn tham khảo
Bài tập lý thuyết mạch điện - Tập 1, Đoàn Đức Tùng.pdfMan_Ebook
Cuốn Bài tập Lý thuyết mạch điện 1 được biên soạn và trình bày chi tiết, phong phú nhiều dạng bài tập khác nhau trên cơ sở người đọc đã học môn Lý thuyết mạch điện 1, với mục đích giúp cho người đọc đã học qua học phần này ôn luyện, củng cố kiến thức và rèn luyện kỹ năng. Các bài tập mẫu bên cạnh tính toán giải mạch thông thường còn có áp dụng Matlab để giải và mô phỏng giúp người đọc có cái nhìn trực quan hơn về các kích thích và đáp ứng trong mạch và giúp có thêm kiến thức về Matlab, đây là một phần mềm rất cần thiết trong các ngành kỹ thuật nói chung và ngành Điện nói riêng.
Ebook Ngân hàng câu hỏi Olympia 2016 mô phỏng lại gameshow Đường lên đỉnh Olympia được tất cả các thế hệ học sinh Việt Nam yêu mến và mong ước được trinh phục ngọn núi này. Mời các bạn cùng tìm hiểu để nắm bắt nội dung thông tin tài liệu.
Nhận viết luận văn đại học, thạc sĩ trọn gói, chất lượng, LH ZALO=>0909232620
Tham khảo dịch vụ, bảng giá tại: https://vietbaitotnghiep.com/dich-vu-viet-thue-luan-van
Download luận văn thạc sĩ ngành toán học với đề tài: Thế vị lớp đơn và bài toán Neumann đối với hàm điều hòa, cho các bạn làm luận văn tham khảo
Tín Hiệu Và Hệ Thống - Phép biến đổi LaplaceQuang Thinh Le
Sưu Tầm: Quang Thinh Le
Facebook: https://www.facebook.com/lequangthinhblog
Bộ môn:Tín Hiệu Và Hệ Thống
Nội dung: Phép biến đổi Laplace
Khoa: Điện tử - HaUI ( Faculty: Electronics - HaUI)
Bài tập lý thuyết mạch điện - Tập 1, Đoàn Đức Tùng.pdfMan_Ebook
Cuốn Bài tập Lý thuyết mạch điện 1 được biên soạn và trình bày chi tiết, phong phú nhiều dạng bài tập khác nhau trên cơ sở người đọc đã học môn Lý thuyết mạch điện 1, với mục đích giúp cho người đọc đã học qua học phần này ôn luyện, củng cố kiến thức và rèn luyện kỹ năng. Các bài tập mẫu bên cạnh tính toán giải mạch thông thường còn có áp dụng Matlab để giải và mô phỏng giúp người đọc có cái nhìn trực quan hơn về các kích thích và đáp ứng trong mạch và giúp có thêm kiến thức về Matlab, đây là một phần mềm rất cần thiết trong các ngành kỹ thuật nói chung và ngành Điện nói riêng.
Ebook Ngân hàng câu hỏi Olympia 2016 mô phỏng lại gameshow Đường lên đỉnh Olympia được tất cả các thế hệ học sinh Việt Nam yêu mến và mong ước được trinh phục ngọn núi này. Mời các bạn cùng tìm hiểu để nắm bắt nội dung thông tin tài liệu.
Nhận viết luận văn đại học, thạc sĩ trọn gói, chất lượng, LH ZALO=>0909232620
Tham khảo dịch vụ, bảng giá tại: https://vietbaitotnghiep.com/dich-vu-viet-thue-luan-van
Download luận văn thạc sĩ ngành toán học với đề tài: Thế vị lớp đơn và bài toán Neumann đối với hàm điều hòa, cho các bạn làm luận văn tham khảo
Tín Hiệu Và Hệ Thống - Phép biến đổi LaplaceQuang Thinh Le
Sưu Tầm: Quang Thinh Le
Facebook: https://www.facebook.com/lequangthinhblog
Bộ môn:Tín Hiệu Và Hệ Thống
Nội dung: Phép biến đổi Laplace
Khoa: Điện tử - HaUI ( Faculty: Electronics - HaUI)
3. BM MTT&TT 3
Giới thiệu
Tái định nghĩa các tác tử
Tái định nghĩa bằng hàm độc lập
Tái định nghĩa bằng hàm thành viên
Tái định nghĩa phép gán
Tái định nghĩa tác tử nhập - xuất
Nội dung bài giảng
4. BM MTT&TT 4
Các toán tử trong C++ chỉ thao tác trên các
kiểu dữ liệu cơ bản.
Tái định nghĩa toán tử: Định nghĩa lại chức năng
của một toán tử để nó có thể thực hiện trên
các kiểu dữ liệu lớp (hay có đối số là đối
tượng).
Mục đích: Viết các biểu thức dưới dạng “thân
thuộc” hơn.
Giới thiệuGiới thiệuGiới thiệu
5. BM MTT&TT 5
Tại sao cần tái định nghĩa tác tử?
Giới thiệu
class PhanSo {
int tu, mau;
public:
PhanSo(int=0, int=1){…}
void InPs() {…}
int LonHon (PhanSo x) {
return (tu*x.mau>mau*x.tu);
}
PhanSo Cong(PhanSo x) {…}
};
void main() {
PhanSo a(4,9), b(3,7);
if(b.LonHon(a))
cout<<“PS b lon hon a”;
PhanSo c = b.Cong(a);
a.InPs(); cout<< “ + ”;
b.InPs(); cout<< “ = ”;
c.InPs();
}
if ( b > a )
Tái định nghĩa tác tử để có thể
viết biểu thức một cách “thân
thuộc” hơn (dùng toán tử thay vì
dùng hàm)
Phan So c = b + a
cout << a << “ + ” << b
<< “ = ” << c;
6. BM MTT&TT 6
Chức năng của một toán tử được định nghĩa bằng một hàm
(với tên hàm là ký hiệu của toán tử) => Tái định nghĩa
toán tử chính là tái định nghĩa hàm.
Cú pháp:
<kiểu dl trả về> operator <toán tử>(<đối số>);
Có 2 cách tái định nghĩa toán tử:
Dùng hàm đ c l pộ ậ
Dùng hàm thành viên
Giới thiệu
Một số toán tử chỉ
được TĐN bằng 1 cách
Các toán tử có thể tái ĐN
7. BM MTT&TT 7
Cú pháp:
<kiểu dl trả về> operator <toán tử>(<đối số>);
Chú ý:
Số đối số của hàm chính là số toán hạng của toán tử
Toán tử hai ngôi: đối số thứ nhất là toán hạng bên trái, đối
số thứ hai là toán hạng bên phải toán tử.
Toán tử một ngôi: đối số là toán hạng duy nhất của toán
tử (qui tắc này không áp dụng đối với toán tử tăng/ giảm
sau, postfix [in/des]crement).
Thông thường các hàm tái ĐN toán tử được khai báo là hàm
bạn của lớp là kiểu của toán hạng của toán tử này.
Các toán hạng của toán tử
???
Tái định nghĩa bằng hàm độc lập
8. BM MTT&TT 8
class Phanso {
int tu, mau;
public:
Phanso(int t=0, int m=1) {
tuso = t; mauso = m;
}
void in() {
cout << tu << "/"
<< mau;
}
friend Phanso operator+(
Phanso, Phanso);
friend Phanso operator+(
Phanso, int);
friend Phanso operator-(
Phanso); //unary ‘-’
};
Phanso operator+(Phanso p,
Phanso q)
{
Phanso kq;
kq.tu = p.tu*q.mau+p.mau*q.tu;
kq.mau = p.mau*q.mau;
return kq;
}
Phanso operator+(Phanso p, int n)
{
Phanso kq(p.tu+p.mau*n, p.mau);
return kq;
}
Phanso operator-(Phanso p) {
return Phanso(-p.tu, p.mau);
} //unary ‘-’
Tái định nghĩa bằng hàm độc lập
9. BM MTT&TT 9
Chú ý:
Toán tử tái định nghĩa
không có tính giao hoán
Muốn toán tử có tính giao
hoán, ta phải khai báo
thêm hàm tái ĐN toán tử
với đối số giao hoán.
Thông thường: Phanso operator+(const Phanso&, const Phanso&);
void main()
{
Phanso a(1,2), b(2,3);
Phanso c = a + b;
//c = operator+(a, b);
Phanso d = a + 10;
//d = operator+(a, 10);
Phanso e = -a;
//e = operator-(a);
Phanso f = 10 + a; //Error
}
Phanso operator+(int n,
Phanso p)
{
return (p + n);
}
Tái định nghĩa bằng hàm độc lập
10. BM MTT&TT 10
Cú pháp:
<kiểu dl trả về> operator <toán tử>(<đối số>);
Chú ý:
Chỉ sử dụng cho các toán tử có toán hạng đầu tiên (bên trái)
là đối tượng của lớp đó.
Mặc nhiên, toán hạng đầu tiên là đối tượng của lớp
=> Có ít hơn 1 đối số so với tái ĐN bằng hàm độc lập.
Tái định nghĩa bằng hàm thành viên
11. BM MTT&TT 11
class Phanso {
int tu, mau;
public:
Phanso(int t=0, int m=1) {
tu = t; mau = m;
}
void in() {
cout << tu << "/" << mau;
}
Phanso operator+(Phanso);
//Phanso + Phanso
Phanso operator+(int);
//Phanso + int
Phanso operator-();
//unary ‘-’: -Phanso
int operator==(Phanso);
};
Phanso Phanso::operator+(Phanso p){
Phanso kq;
kq.tu = tu*p.mau + mau*p.tu;
kq.mau = mau*p.mau;
return kq;
}
Phanso Phanso::operator+(int n)
{
Phanso kq(tu + mau*n, mau);
return kq;
}
Phanso Phanso::operator-() {
return Phanso(-tu, mau);
} //unary ‘-’
int Phanso::operator==(Phanso p) {
return ((float)tu/mau ==
(float)p.tu/p.mau);
}
Tái định nghĩa bằng hàm thành viên
12. BM MTT&TT 12
Chú ý:
Tương tự như tái ĐN toán tử
bằng hàm độc lập, tái ĐN
toán tử bằng hàm thành
viên không có tính giao
hoán.
Trong một số trường hợp,
không thể định nghĩa toán
tử có tính chất giao hoán
bằng hàm thành viên được
void main()
{
Phanso a(1,2), b(2,3);
Phanso c = a + b;
//c = a.operator+(b);
Phanso d = a + 10;
//d = a.operator+(10);
Phanso e = -a;
//e = a.operator-();
if (a==b)
cout << "a bang b";
else
cout << "a khong bang b";
}
Không ĐN toán tử int + Phanso được!
Tái định nghĩa bằng hàm thành viên
13. BM MTT&TT 13
Các toán tử số học: -(unary), +, -, *, /, %
Một số chú ý:
Các toán tử này đều có thể tái định nghĩa bằng hàm thành
viên hoặc hàm độc lập.
Thông thường, kiểu trả chính là lớp của đối tượng là toán
hạng.
Các toán tử này không làm thay đổi giá trị của t.hạng
Phanso operator-();
Phanso operator+(const Phanso&);
Phanso operator-(const Phanso&);
Phanso operator*(const Phanso&);
Phanso operator/(const Phanso&);
Phanso operator-(const Phanso&);
Phanso operator+(const Phanso&,
const Phanso&);
Phanso operator*(const Phanso&,
const Phanso&);
//t ng t cho các toán t khácươ ự ử
Tái định nghĩa bằng thành viên Tái định nghĩa bằng độc lập
Tái định nghĩa toán tử số học
14. BM MTT&TT 14
Các toán tử so sánh: >, <, >=, <=, ==, !=
Một số chú ý:
Các toán tử so sánh có thể tái ĐN bằng hàm thành viên hoặc
hàm độc lập.
Kiểu trả về luôn là kiểu int (1: true, 0: false).
Toán tử không làm thay đổi giá trị của toán hạng.
int operator>(const Phanso&);
int operator<(const Phanso&);
int operator>=(const Phanso&);
int operator<=(const Phanso&);
int operator==(const Phanso&);
int operator!=(const Phanso&);
int operator>(const Phanso&,
const Phanso&);
int operator<(const Phanso&,
const Phanso&);
int operator==(const Phanso&,
const Phanso&);
//t ng t cho các toán t khácươ ự ử
Tái định nghĩa bằng thành viên Tái định nghĩa bằng độc lập
Tái định nghĩa toán tử so sánh
15. BM MTT&TT 15
Phép gán mặc nhiên:
Nếu ta không tái định nghĩa thì trình biên dịch sẽ tự động thực
hiện phép gán bằng cách gán bằng tương ứng thuộc tính hai
đối tượng.
Phép gán bằng này chỉ đúng khi đối tượng không có dữ liệu
thành viên là con trỏ (xem lại hàm XDSC).
=> Nếu lớp không có dữ liệu thành viên là con trỏ thì không
cần tái ĐN phép gán.
Phép gán này chỉ thực hiện khi hai toán hạng cùng kiểu.
Tái định nghĩa toán tử gán
class Stack {
float *ds;
int soluong , vitri;
public :
...
void operator = ( const Stack& s) {
soluong = s.soluong;
vitri = s.vitri;
delete[] ds;
ds = new float[soluong];
for(int i=0; i<vitri; i++)
ds[i]= s.ds[i];
} };
void main() {
Stack s1(100);
…
Stack s2(20);
…
s2 = s1;
…
s1 = s2; }
16. BM MTT&TT 16
Một số chú ý:
Phép gán chỉ được tái ĐN bằng hàm thành viên.
Có thể ĐN phép gán giữa các toán hạng khác kiểu.
Cần phân biệt giữa phép gán và hàm XDSC.
Trị trả về của phép gán có thể là chính đối tượng vừa được
gán hoặc void.
class Phanso {
int tu, mau;
public:
//các hàm thành viên
...
void operator=(int n) {
tu = n; mau = 1;
}
};
void main() {
Phanso p1(1,2), p2, p3;
//không c n tái đ nh nghĩaầ ị
//toán t gán gi a hai phân sử ữ ố
p2 = p1;
p1 = 5;
p2 = p3 = 5; //L iỗ
}
Tái định nghĩa toán tử gán
17. BM MTT&TT 17
class Stack {
float *ds;
int sluong, vtri;
public:
//các hàm thành viên
...
Stack operator=(const Stack& s)
{
sluong = s.sluong;
vtri = s.vtri;
delete[] ds;
ds = new float[sluong];
for (int i=0; i<vtri; i++)
ds[i] = s.ds[i];
return *this;
}
};
Stack s1(30), s2(10), s3(20);
...
s2 = s3; //phép gán
...
s1 = s2 = s3; //OK, phép gán
...
Stack s4 = s1; //XDSC
//ho c Stack s4(s1);ặ
Tái định nghĩa toán tử gán
18. BM MTT&TT 18
Phân biệt giữa phép gán và hàm xây dựng sao chép:
Phép gán: đối tượng đã tồn tại (có vùng nhớ)
Hàm xây dựng sao chép: đối tượng chưa có
Trị trả về của phép gán có thể là chính đối tượng đó.
class SinhVien {
char mssv[9];
char* hoten;
int namsinh;
float diemtb;
public:
...
SinhVien& operator=(const SinhVien& a){
strcpy(mssv,a.mssv);
delete[] hoten;
hoten = strdup(a.hoten);
namsinh = a.namsinh;
diemtb = a.diemtb;
return *this;
}
};
Phải copy dữ liệu
Xóa vùng nhớ cũ, cấp vùng
nhớ mới và copy dữ liệu
void main(){
SinhVien a, b, c;
a.Nhap();
c = b = a; //phép gán
SinhVien d=a; // hxdsc
}
Tái định nghĩa toán tử gán
19. BM MTT&TT 19
Toán tử tăng/giảm: ++, --
Một số chú ý:
Có thể tái ĐN bằng hàm TV hoặc hàm độc lập.
Phép toán tăng/giảm gồm tăng giảm trước (prefix, tăng/giảm
giá trị toán hạng trước khi trả kết quả trả về) và tăng giảm
sau (postfix, tăng/giảm giá trị sau khi trả kết quả trả về).
Toán tử này làm thay đổi giá trị của toán hạng.
Phép tăng/giảm trước: Tái định nghĩa giống như toán tử trừ
một ngôi (hàm TV: 0 đối số, hàm ĐL: 1 đối số)
Phép tăng giảm sau: Thêm vào 1 đối số giả kiểu int.
Tái định nghĩa toán tử tăng giảm
20. BM MTT&TT 20
class Phanso {
int tu, mau;
public:
//Các hàm thành viên
...
//Tái đ nh nghĩa b ng hàm thành viênị ằ
Phanso& operator ++() {
tu += mau; return *this;
} //tăng tr c (prefix)ướ
Phanso& operator ++(int n){
Phanso oldVal(*this);
tu += mau; return oldVal;
} //tăng sau (postfix)
//Tái đ nh nghĩa b ng hàm đ c l pị ằ ộ ậ
friend Phanso& operator --(
Phanso&); //gi m tr cả ướ
friend Phanso& operator --(
Phanso&, int); //gi m sauả
};
Phanso& operator --(Phanso& p) {
p.tu -= p.mau;
return p;
}
Phanso& operator --(Phanso& p,
int n) {
Phanso oldVal(p);
p.tu -= p.mau;
return oldVal;
}
void main() {
Phanso a(1,2), b, c;
b = a++;
c = ++a;
++++a; //ph c t p, nên tránhứ ạ
}
const Phanso& operator ...
Giải pháp
Tái định nghĩa toán tử tăng giảm
21. BM MTT&TT 21
Các phép toán nhập (>>), xuất (<<) phải được định nghĩa theo dạng
hàm độc lập và thường khai báo là friend.
Thao tác với các dòng (stream) xuất/nhập chuẩn như:
Bàn phím, tập tin dùng để đọc, … (istream)
Màn hình, tập tin dủng để ghi, … (ostream)
Xuất:
ostream& operator<<(ostream&, const ClassType&);
Nhập:
istream& operator>>(istream&, ClassType&);
class PhanSo {
int tu, mau;
public :
…
friend ostream& operator << (ostream& os, PhanSo p);
friend istream& operator >> (istream& is, PhanSo& p);
};
Tái định nghĩa toán tử xuất nhập
22. BM MTT&TT 22
Ví d 1ụ
class Diem {
int x, y;
public :
…
friend ostream& operator << (ostream& os, Diem p);
friend istream& operator >> (istream& is, Diem& p);
};
ostream& operator << (ostream& os, Diem p)
{ os << “(” << p.x << “,” << p.y <<“)”; return os; }
istream& operator >> (istream& is, Diem& p) {
cout << “Nhap hoanh do: ”; is >> p.x;
cout << “Nhap tung do: ”; is >> p.y;
return is;
}
void main() {
Diem a(2,10), b;
cout<< “Gia tri diem A la: ” << a <<endl;
cout<< “Nhap gia tri cho diem B: ”<<endl; cin>>b;
cout<< “Gia tri diem B la: ” << b <<endl;
}
Tái định nghĩa toán tử xuất nhập
24. BM MTT&TT 24
Không được thay đổi số “ngôi” (số toán hạng) của một toán
tử.
Toán tử được tái định nghĩa không có tính giao hoán.
Toán tử được tái định nghĩa phải có ít nhất một toán hạng
có kiểu là lớp (là một đối tượng).
Toán tử gán: chỉ được định nghĩa bằng hàm TV.
Toán tử nhập xuất: chỉ được định nghĩa bằng hàm độc lập
(vì toán hạng trái không phải là đối tượng).
Chú ý kiểu trả về của hàm tái ĐN toán tử và sự liên quan
của nó đến cú pháp của các biểu thức.
Còn các toán tử khác ([ ], (), …) SV tự tìm hiểu thêm.
Tóm tắt