Khái niệm cơ bản về ngôn ngữ C++
Một số thay đổi so với ngôn ngữ C
Một số bổ sung so với ngôn ngữ C
Lịch Sử Của C++
C được phát minh trước 1970 bởi Dennis Ritchie
Ngôn ngữ cài đặt hệ thống cho hệ điều hành Unix
C++ được phát minh bởi Bijarne Stroustroup, bắt đầu năm 1979, dựa trên ngôn ngữ C
Các chuẩn ngôn ngữ C++ hiện tại được điều khiển bởi ANSI và ISO
62 trang |
Chia sẻ: candy98 | Lượt xem: 509 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình hướng đối tượng - Chương 2: Giới thiệu ngôn ngữ C++ - Trần Minh Thái, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 2 Giới thiệu ngôn ngữ C++TRẦN MINH THÁIEmail: minhthai@itc.edu.vnWebsite: www.minhthai.edu.vn Cập nhật: 05 tháng 01 năm 2015Nội dungKhái niệm cơ bản về ngôn ngữ C++Một số thay đổi so với ngôn ngữ CMột số bổ sung so với ngôn ngữ CLịch Sử Của C++C được phát minh trước 1970 bởi Dennis RitchieNgôn ngữ cài đặt hệ thống cho hệ điều hành UnixC++ được phát minh bởi Bijarne Stroustroup, bắt đầu năm 1979, dựa trên ngôn ngữ CCác chuẩn ngôn ngữ C++ hiện tại được điều khiển bởi ANSI và ISOĐặc điểm C++CĐa dụngHiệu quảGần với ngôn ngữ máyKhả chuyểnC++Các mở rộngTham chiếuOverloadingException handlingTemplateOOPLớp và đối tượngKế thừaĐa hìnhCấu trúc chương trình C++ cơ bản#include int main (void){ cout , >=, void main(){ int x, y; cout>x; cout>y; coutusing namespace std;void main(){ int x, y; cout>x; cout>y; cout> là toán tử trích, đưa nội dung từ dòng nhập chuẩn vào biếnVí dụcin>>x>>y;Xuất có định dạngThư viện iomanip.h hoặc iomanip (trên .Net) cout(3)/4;Hằng số (const)C định nghĩa nghĩa hằng bằng tiền xử lý #define, hạn chế: Biên dịch chậm hơn (do trình tiền xử lý tìm và thay thế)Không gắn được kiểu dữ liệu với giá trị hằngTrình debug không biết đến tên hằngHằng sốconst của ANSI C ít dùng hơn và có ý nghĩa khác: Không dùng để khai báo mảng//Error in Cconst int SIZE=100;int a[SIZE];//OK in C++const int SIZE=100;int a[SIZE];Toán tử định phạm vi (scope resolution oprator)Ký hiệu: ::Công dụng: truy xuất đến phần tử bị che khuất bởi phạm vi hiện thờiint x=5;void main(){ int x=16; cout d2) ? d1 : d2;} int max(int i1, int i2){ return (i1 > i2)? i1 : i2;} void main(){ int i = max(12, 8); double d = max(32.9, 17.4);}Đa năng hoáĐiều kiệnSố lượng tham số phải khác nhauKiểu của tham số phải khác nhauNếu cùng số lượng tham số thì phải có ít nhất 1 tham số khác kiểuĐa năng hoá toán tử (operator overloading)Các toán tử +, - , * , /, chỉ áp dụng đối với các kiểu cài sẵn (int, char, float, )Muốn dùng các toán tử này trên các kiểu dữ liệu tự định nghĩa thì phải sử dụng đa năng hoá toán tửstruct Complex{ float r, i;};Complex c1, c2;Complex c = c1 + c2;Sử dụng cú pháp toán họcĐơn giản hóa chương trìnhĐa năng hoá toán tửMột toán tử có thể dùng cho nhiều loại kiểu dữ liệuCác toán tử được chia thành hai loạiToán tử một ngôi: chỉ có một toán hạngToán tử hai ngôi: có hai toán hạngToán tử một ngôi lại chia thành hai loạiTiền tố: toán tử đặt trước toán hạngHậu tố: toán tử đặt sau toán hạngĐa năng hoá toán tửĐa năng hoá toán tửCú pháp:type_name operator operator_symbol ( parameters_list ){}Từ khóa operator khai báo một hàm chỉ rõ ý nghĩa của toán tử operator_symbol.Đa năng hoá toán tửSố lượng tham số của hàm chính là số ngôi của toán tửCác toán tử được đa năng hóa sẽ được lựa chọn bởi TBD cũng theo cách thức tương tự như việc chọn lựa giữa các hàm được đa năng hóaĐa năng hoá toán tửstruct Complex{ float r, i;};Complex operator + (Complex c1, Complex c2){ Complex tmp; tmp.r = c1.r + c2.r; tmp.i = c1.i + c2.i; return tmp;}Complex c1, c2, c; c = c1 + c2;c = operator + (c1, c2);Đa năng hoá toán tửKhông thể định nghĩa toán tử mớiPhần lớn các toán tử được đa năng hóaNgoại trừ các toán tử . .* :: ?: typeid sizeof const_cast dynamic_cast reinterpret_cast static_castĐa năng hoá toán tửKhông thể đa năng hóa ký hiệu tiền xử lýKhông thể thay đổi độ ưu tiên của toán tử hay số các toán hạng của nóKhông thể thay đổi ý nghĩa của toán tử khi áp dụng các kiểu cài sẵnTrong hàm định nghĩa toán tử không có các tham số có giá trị mặc địnhĐa năng hoá toán tử+-*/%|&^~>>>==thành viên->* thành viên con trỏ,&địa chỉ*con trỏ+dấu dương-dấu âm( type_name )type_name ( ) Toán tử chuyển kiểuTemplateĐược sử dụng khi có những đoạn mã tương đồng về công việc nào đóVD: hàm tìm giá trị lớn nhất của hai số nguyênHàm này chỉ sử dụng cho 2 số nguyên, đối với số thực viết lại hàm có sự thay đổi về kiểu dữ liệuint Max(int a, int b){ return (a>b) ? a : b;}TemplateTemplate để giải quyết vấn đề xử lý có tính chất tổng quát (genetic) với kiểu dữ liệu chưa xác địnhDựa vào template có thể tạo các công việc cụ thể (thực thể) theo một cách nào đó Gồm 2 loạiHàm templateLớp templateHàm templateHàm đặc biệt được tham số sao cho chúng thể hiện một họ các hàmCung cấp một hàm mà có thể được gọi cho các kiểu dữ liệu khác nhauHàm template có thể có một hoặc nhiều tham số hình thức gọi là tham số kiểuHàm templateCú pháp:Định nghĩa template function_declaration template function_declarationSử dụng function_name ( parameters ); function_name ( parameters );Hàm templatetemplate T Max(T a, T b){ return (a>b) ? a : b;}void main(){ int x = 4, y = 12; cout(x,y) void MyFun(T x){ cout void MyFun(T1 x,T2 y){ coutint ZeroCount(T x[]){ int count=0; for(int i=0;i(a); }Tham số kiểuTham số biểu thứcQ&A