Лекция 09. Перегрузка операторов.

Tài liệu tương tự
Суркова О.П. Математика. Справочник. Начальная школа - Суркова О.П. (скачать фрагмент)

Lập trình và ngôn ngữ lập trình

Microsoft PowerPoint - OOP4-OperatorOverloading_new.ppt

Chương trình dịch

Hàm và lớp template trong Lập trình hướng đối tượng Hàm và lớp template trong Lập trình hướng đối tượng Bởi: unknown Trong phần này, chúng ta tìm hiểu

Bài 7. Con trỏ Mục tiêu: 1. Luyện tập sử dụng con trỏ và địa chỉ của các biến 2. Sử dụng con trỏ khi thao tác với mảng. Giới hạn: không dùng các thư v

NGÔN NGƯ LÂ P TRIǸH Biên tập bởi: nguyenvanlinh

Template and Exception Template and Exception Bởi: Thanh Hiền Vũ TEMPLATE Trong phần này, chúng ta tìm hiểu về một trong các đặc tính còn lại của C++,

Copyright vietjack.com Nạp chồng toán tử trong C# Operator Overloading là Nạp chồng toán tử. Bạn có thể tái định

Những cơ sở của ngôn ngữ C# Những cơ sở của ngôn ngữ C# Bởi: phamvanviet truonglapvy Trong chương này sẽ trình bày về hệ thống kiểu trong C#; phân biệ

Hệ điều hành Bài tập tuần 6 1 Quản lý bộ nhớ Bài tập 1 : Xem thông tin bộ nhớ 1. Sử dụng top, ps đọc thông tin về kích thước vùng nhớ của 1 tiến trình

Бланки ЕГЭ 2019

Câu lệnh (statement) Câu lệnh (statement) Bởi: Khuyet Danh Trong C# một chỉ dẫn lập trình đầy đủ được gọi là câu lệnh. Chương trình bao gồm nhiều câu

Kế thừa

Java cơ bản

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 5. Kiểu dữ liệu và biểu thức trong C Nội dung 1. Các ki

ZBORNIK-7_susreta_HDM-Split-2016 (1).pdf

Animation, Modules 6 - Hoạt hình, tách file

<456E636F72653A20443A5CCDCED2DB5CCACECCCFCEC7C8D2CED05CCFE5F1EDE85CCEF1E0EDEDE0>

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 9. Vào ra dữ liệu trong C Các lệnh vào ra dữ liệu C cun

Lớp và đối tượng-các hàm và các lớp friend Lớp và đối tượng-các hàm và các lớp friend Bởi: Thanh Hiền Vũ CÁC HÀM VÀ CÁC LỚP friend Một hàm friend của

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 13. Hàm Nội dung 1. Khái niệm hàm 2. Khai báo và sử dụn

Microsoft PowerPoint - 02_Address_Book

_IFMP_exam.dvi

Chuỗi Chuỗi Bởi: phamvanviet truonglapvy Chuỗi (string) trong C# là một kiểu dựng sẵn như các kiểu int, long, có đầy đủ tính chất mềm dẻo, mạnh mẽ và

TRƯỜnG ĐẠI HỌC BÁCH KHOA HÀ nội VIỆn CÔnG nghệ THÔnG TIn VÀ TRUYỀn THÔnG TIN HỌC ĐẠI CƯƠNG Bài 10. Các cấu trúc lập trình trong C Nội dung 1. Cấu trúc

Microsoft Word - danh-sach-lien-ket-doi-trong-c.docx

Ví dụ về duyệt đồ thị ưu tiên chiều sâu DFS và ứng dụng Đồ thị ví dụ: Nguyễn Hữu Tuân vimaru.edu.vn Hình 1: Đồ thị vô hướng có 8 đỉnh Với đồ thị trên,

!#" $ % & % "' ()*+ % &, - %. /0 1 " & ".!% " ;:<5 = : 9HGI7 DKJLG?3 Proxy Pattern M!#" N &OP $ %QP % ' " /!#% P'.!#% "!#" P! "

Xử lý ngoại lệ

Copyright vietjack.com Chuỗi (String) trong C# Trong C#, bạn có thể sử dụng các chuỗi (string) như là mảng các ký

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 11. Mảng và xâu kí tự Nội dung 1. Mảng 2. Xâu kí tự 2 1

Cách tạo User và Thiết kế Database Cách tạo User và Thiết kế Database Bởi: Khoa CNTT ĐHSP KT Hưng Yên Cách tạo một User Database Chúng ta có thể tạo m

Chương 1:

Slide 1

Microsoft Word - status_code_trong_servlet.docx

Microsoft Word - kieu_du_lieu_trong_jdbc.docx

прайс коммакс 13,03,15

Array, Indexer và Collection Array, Indexer và Collection Bởi: phamvanviet truonglapvy Mảng (Array) Mảng là một tập hợp các phần tử có cùng kiểu, được

PowerPoint Template

نظام حماية الخزنة

Trường ĐHBK Hà Nội Khoa Điện Bộ môn Điều khiển Tự động Tài liệu hướng dẫn thực hành: KĨ THUẬT LẬP TRÌNH C/C++ Bài 1: Lập trình cơ sở 1 Mục đích bài th

BÀI TẬP THỰC HÀNH

Тесты по геометрии 10 класс. Часть 1 (фрагмент) - Сугоняев И.М.

Lớp đối tượng String Lớp đối tượng String Bởi: Khuyet Danh Ngôn ngữ C# hỗ trợ khá đầy đủ các chức năng của kiểu chuỗi mà chúng ta có thể thấy được ở c

Lớp đối tượng trong.net Framework Lớp đối tượng trong.net Framework Bởi: Khuyet Danh Trong chương này chúng ta sẽ tìm hiểu các lớp cơ sở mà.net cung c

ĐỀ THI GIỮA KỲ MÔN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Đề số 1. Thời gian 120 phút (Sinh viên KHÔNG được sử dụng tài liệu hay máy tính ) Xây dựng lớp STRING và

Çàäà à A. Äåëàåì ñðåçû ÔÌË Ñåðèÿ 11, ñòðîêè. 18 äåêàáðÿ Îãðàíè åíèå ïî âðåìåíè: Îãðàíè åíèå ïî ïàìÿòè: 2 ñåêóíäû 64 Ìá Ôîðìàò âõîäíûõ ä

PowerPoint Presentation

Lập trình cấu trúc trong Visual Basic Lập trình cấu trúc trong Visual Basic Bởi: Nguyễn Sơn Học xong chương này, sinh viên phải nắm bắt được các vấn đ

pasport upravlenie.indd

2017_03_01 Крепление.cdr

Microsoft Word - Bai 7.1.docx

Microsoft Word - cau-truc-du-lieu-hang-doi.docx

<456E636F72653A20453A5CCCEEE820E4EEEAF3ECE5EDF2FB5CCFCED7D2C05CCAF0E8E2EEF8E5E5>

ГОСТ Шестигранник горячекатаный

<456E636F72653A20443A5CCDCED2DB5CCFCBC0CDDB5C2120CDC020CFC5D0C5CAD0A8D1D2CAC0D5>

Microsoft Word - su_dung_sqlite_voi_php.docx

Kế thừa và đa hình

Slide 1

View, Procedure, Function & Trigger

NGÔN NGỮ THỐNG KÊ R

OpenStax-CNX module: m Giới thiệu về ngôn ngữ C và môi trường turbo C 3.0 ThS. Nguyễn Văn Linh This work is produced by OpenStax-CNX and licens

Microsoft PowerPoint - 03_Robo_Kick

maket.indd

Cách viết một ứng dụng trên microsoft windows Cách viết một ứng dụng trên microsoft windows Bởi: Khuyet Danh CÁCH VIẾT MỘT ỨNG DỤNG TRÊN MICROSOFT WIN

Microsoft Word - custom_component_trong_android.docx

<456E636F72653A20443A5CCDCED2DB5CCDC020CFC5D0C5CAD0A8D1D2CAC0D520C6C8C7CDC82B5C>

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 11. Tệp tin Nội dung 1. Khái niệm cơ bản 2. Các thao tá

Система отопления, Москва

devanaayakapanchaashat.dvi

Mảng Mảng Bởi: Thu Nguyen DỮ LIỆU KIỂU MẢNG (ARRAY) I. KHAI BÁO MẢNG Cú pháp: TYPE VAR <Kiểu mảng> = ARRAY [chỉ số] OF <Kiểu dữ liệu>; <Biến mảng>:<ki

Chương 4 : Sử dụng Hàm(Function) Chương 4 : Sử dụng Hàm(Function) Bởi: Khoa CNTT ĐHSP KT Hưng Yên Hàm (Function) được xem như là những công thức định

Microsoft Word - tong_hop_thuoc_tinh_trong_css.docx

География России 9 класс. Проверочные работы (фрагмент) - Волкова Г.А.

Цены от г

Cây nhị phân tìm kiếm Cây nhị phân tìm kiếm Bởi: Trần Hạnh Nhi CÂY NHỊ PHÂN TÌM KIẾM Định nghĩa: Cây nhị phân tìm kiếm (CNPTK) là cây nhị phân trong đ

nyaasatilakam.dvi

KORIZA_1L.cdr

l l l l l l l l l l l l l l l l l l l l l l l l l l l l l ÏÈ l l l l l l l l l l l l l l l l l l l l l l l l l l l l úè l l l l l l l l l l l l l l úè

Microsoft Word - custom_font_trong_android.docx

Microsoft Word - server_response_trong_servlet.docx

Hướng dẫn cụ thể từng bước để đăng ký sử dụng Đơn đăng ký không tín chỉ sau đó ghi danh vào các lớp không tín chỉ. 1 tháng Sáu, 2018 Các sinh viên dự

Danh sách tuyến tính kiểu hàng đợi Danh sách tuyến tính kiểu hàng đợi Bởi: Khoa CNTT ĐHSP KT Hưng Yên ĐỊNH NGHĨA Hàng đợi là một vật chứa (container)

ENGLISH часть 2.indd

Microsoft Word - xu_ly_cookie_trong_servlet.docx

Microsoft Word - Lab09 - WebSieuthisach.doc

Algebra v tablitsah i shemah_P2.pdf

Microsoft Word - tao_ung_dung_hello_world_trong_android.docx

bảng giá / rate card

Copyright by VnCFD Research Group Bài 9: Sơ đồ sai phân một chiều dạng tường minh cho hệ phương trình Hyperbol bất kì Hệ đối xứng. Tích phân n

26 Khoa hoïc Coâng ngheä LẬP TRÌNH PHÂN TÁN DÙNG CÔNG NGHỆ MOBILE AGENT VỚI SỰ HỖ TRỢ CỦA JAVA VÀ VOYAGER Tóm tắt ThS. Nguyễn Khắc Quốc * Lập trình ph

Microsoft Word - DCOnThiVaoLop10_QD_Sua2009_

Bản ghi:

Ëåêöèÿ 09. Ïåðåãðóçêà îïåðàòîðîâ. Åâãåíèé Ëèíñêèé

Ïåðåãðóçêà îïåðàòîðîâ 1 Íåêîòîðîûå îïåðàòîðû (ñêîðåé âñåãî íå âñå): + - * / % += -= *= /= %= +a -a ++a a++ --a a-- &&! & ~ ^ &= = ^= << >> <<= >>= = ==!= < > >= <= &a *a a-> () [] (type)., (a? b : c) 2 Ïåðåãðóçêà int average(int, int); double average(double, double). 3 Ìîæíî ñ èòàòü, òî êîìïèëÿòîð âèäèò c = a + b êàê c = operator+(a,b) 4 Ìîæíî ñòàíäàðòíûé îïåðàòîð int operator+(int, int) ïåðåãðóçèòü äëÿ ñâîåãî êëàññà BigInt: BigInt operator+(const BigInt&, const BigInt&). 5 Îïåðàòîðû "." è "a?b:c" ïåðåãðóæàòü íåëüçÿ C++ 2 / 13

Ïåðåãðóçêà îïåðàòîðîâ BigInt êëàññ äëÿ äëèííîé àðèôìåòèêè (íàïðèìåð, 2048 äâîè íûõ ðàçðÿäîâ). // 1. Outside class BigInt operator +( const BigInt & a, const BigInt & b ){... // 2. Inside class: 'this' instead 'a' BigInt BigInt :: operator +( const BigInt & b ) {... C++ 3 / 13

const/non-const class BigInt { char operator []( size_t i ) const ; char & operator []( size_t i ); ; Ïî åìó non-const ìåòîä âîçâðàùàåò ññûëêó? C++ 4 / 13

const/non-const class BigInt { char operator []( size_t i ) const ; char & operator []( size_t i ); ; Ïî åìó non-const ìåòîä âîçâðàùàåò ññûëêó? òîáû ìîæíî áûëî äåëàòü òàê BigInt a(74574); a[3] = 5; C++ 4 / 13

const/non-const class BigInt { char operator []( size_t i ) const ; char & operator []( size_t i ); ; Ïî åìó non-const ìåòîä âîçâðàùàåò ññûëêó? òîáû ìîæíî áûëî äåëàòü òàê BigInt a(74574); a[3] = 5; Çà åì íóæåí const ìåòîä? C++ 4 / 13

const/non-const class BigInt { char operator []( size_t i ) const ; char & operator []( size_t i ); ; Ïî åìó non-const ìåòîä âîçâðàùàåò ññûëêó? òîáû ìîæíî áûëî äåëàòü òàê BigInt a(74574); a[3] = 5; Çà åì íóæåí const ìåòîä? òîáû ìîæíî áûëî ïåðåäàòü BigInt a(453); â print(const BigInt&) C++ 4 / 13

operator= class BigInt { size_t size_ ; char * digits_ ; BigInt ( const BigInt & num ) {... void swap ( BigInt & b ) { std :: swap ( size_, b. size_ ); std :: swap ( digits_, b. digits_ ); BigInt & operator =( const BigInt & num ) { if ( this!= & num ) { BigInt tmp ( num ); tmp. swap (* this ); return * this ; ; C++ 5 / 13

operator= std::swap(a,b) ôóíêöèÿ èç ñòàíäàðòíîé áèáëèîòåêè C++: Ìåíÿåò ìåñòàìè çíà åíèÿ a è b. Ìîæíî ñ èòàòü, òî ïåðåãðóæåíà äëÿ ïðèìèòèâíûõ òèïîâ è óêàçàòåëåé (äåòàëè: øàáëîíû, ñëåä. ñåìåñòð). Ñîçäàâ âðåìåííûé îáúåêò ðàâíûé num, ïîìåíÿåì åãî çíà åíèÿ ñ òåêóùèìè çíà åíèÿìè îáúåêòà *this. Âûéäÿ èç ôóíêöèè âðåìåííûé îáúåêò óäàëèòñÿ, à â *this îñòàíóòñÿ íîâûå çíà åíèÿ. Êîðîòêàÿ âåðñèÿ ñ èñïîëüçîâàíèåì áåçûìÿííîé ïåðåìåííîé. BigInt ( num ). swap (* this ); C++ 6 / 13

operator= BigInt(num) (êàê è tmp) ëîêàëüíàÿ ïåðåìåííàÿ, êîãäà çàêîí èòñÿ ñðîê åå æèçíè, òî âûçîâåòñÿ äåêñòðóêòîð. Ýòîò äåñòðóêòîð óíè òîæèò òî, òî äî swap áûëî â this. C++ 7 / 13

Àíîíèìíûå ïåðåìåííûå - I int max ( int a, int b ) {... main () { int a = 2; int b = 3; int c = max (a, b ); èëè c ïîìîùüþ àíîíèìíûå ïåðåìåííûõ main () { int c = max (2, 3); C++ 8 / 13

Àíîíèìíûå ïåðåìåííûå - II BigInt max ( const BigInt & a, const BigInt & b ) {... main () { BigInt a ( " 323232232323232322 " ); BigInt b ( " 37382787387382738273 " ); BigInt c = max (a, b ); èëè c ïîìîùüþ àíîíèìíûå ïåðåìåííûõ main () { BigInt c = max ( BigInt ( " 323232232323232322 " ), BigInt ( " 37382787387382738273 " )); C++ 9 / 13

prefix/postfix prex/postx BigInt & operator ++(); // prefix BigInt operator ++( int ); // postfix BigInt & BigInt :: operator ++() {... return * this ; //int is unused BigInt BigInt :: operator ++( int ){ BigInt t (* this ); ++(* this ); return t ; Ïîñòôèêñ åðåç ïðåôèêñ. C++ 10 / 13

Ïðèâåäåíèå òèïîâ int ê BigInt: BigInt a = 3; //using constructor class BigInt { ; BigInt ( int a ) {.. Ýòî íå âñåãäà óäîáíî Matrix m = 3. òî õîòåë àâòîð? Çàïîëíèòü ìàòðèöó òðîéêàìè? Ñîçäàòü ìàòðèöó 3x3? Çàïðåò èñïîëüçîâàíèÿ êîíñòðóêòîðà äëÿ ïðèâåäåíèÿ òèïîâ class Matrix { ; explicit Matrix ( size_t a ) {.. BigInt ê int: BigInt a(32424); int b = a; class BigInt { ; operator int () const { return...; C++ 11 / 13

Îïåðàòîðû ñðàâíåíèÿ Äîñòàòî íî ðåàëèçîâàòü operator< è operator==. bool operator <( BigInt const & a, BigInt const & b ) {... bool operator ==( BigInt const & a, BigInt const & b ) {... bool operator!=( BigInt const & a, BigInt const & b ) { return!( a == b ); bool operator >( BigInt const & a, BigInt const & b ) { return b < a ; bool operator <=( BigInt const & a, BigInt const & b ) { return!( a > b ); bool operator >=( BigInt const & a, BigInt const & b ) { return!( a < b ); Åñëè íå âàæíà ïðîèçâîäèòåëüíîñòü, òî ìîæíî âûðàçèòü âñå ñðàâíåíèÿ åðåç operator< (Êàê?). C++ 12 / 13

Âíóòðè êëàññà èëè ñíàðóæè BigInt a (3); BigInt b (2); Îïåðàòîðû ñðàâíåíèÿ ëó øå îïðåäåëÿòü âíå êëàññà. a < b Âûïîëíèòñÿ â îáîèõ ñëó àÿõ. a < 2 Âûïîëíèòñÿ â îáîèõ ñëó àÿõ. "2" ïðèâåäåòñÿ ê BigInt. 3 < b Áóäåò ðàáîòàòü òîëüêî åñëè îïåðàòîð ñðàâíåíèÿ îïðåäåëåí âíå êëàññà. Óíàðíûå îïåðàòîðû (+=, -=, *= è ò.ä.) ëó øå äåëàòü âíóòðè êëàññà. À áèíàðíûå îïåðàòîðû (+, -, * è ò.ä.) íà èõ îñíîâå, íî óæå ñíàðóæè êëàññà. BigInt operator +( BigInt a, const BigInt & b ) { a += b ; return a ; Âìåñòî ñîçäàíèÿ âðåìåííîé ïåðåìåííîé ìîæíî ðàáîòàòü ñ êîïèåé ïàðàìåòðà. C++ 13 / 13