1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng lập trình hướng đối tượng dùng c + +chương 2 giới thiệu ngôn ngữ c++

62 418 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 62
Dung lượng 268,13 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Kiểu dữ liệu Kiểm soát kiểu dữ liệu chặt chẻ hơn C Hàm phải được khai báo trước khi sử dụng Không cho phép gán giá trị nguyên cho các biến kiểu enum... Đa năng hoá Overloading Cho phép đ

Trang 2

Nội dung

1 Khái niệm cơ bản về ngôn ngữ C++

2 Một số thay đổi so với ngôn ngữ C

3 Một số bổ sung so với ngôn ngữ C

Trang 5

Object Code

able

Execut-C++

COMPILER NATIVE

C++

TRANSLATOR

LINKER

C COMPILER

C++

Program

Trang 6

Cấp phát bộ nhớTham chiếu

Trang 7

Những từ khoá mới

 Thay đổi định danh trong chương trình C khi chuyển qua C++ nếu trùng với keyword

virtual

Trang 8

//This is the variable //being given a value

x = 5;

*/

Trang 9

Kiểu dữ liệu

Bổ sung kiểu Boolean: bool

• Giá trị: true/ false

• Các toán tử logic (!, &&, ||), phép toán quan hệ (>, >=, <, <=, !=, ==)  giá trị kiểu bool

Các biểu thức điều kiện (if, while, for, do … while) đòi hỏi phải là một giá trị kiểu bool

Trang 11

Kiểu dữ liệu

Kiểm soát kiểu dữ liệu chặt chẻ hơn C

Hàm phải được khai báo trước khi sử dụng

Không cho phép gán giá trị nguyên cho các biến kiểu enum

Trang 12

 int *ip = vp; // Error in C++

 int * ip = (int *) vp; //OK

Trang 13

Dòng nhập/ xuất chuẩn (Standard I/O

stream)

Nhập: lấy dữ liệu từ bàn phím, file, …

Xuất: xuất kết quả lên màn hình, ra file, …

Sử dụng hai đối tượng (object stream)

cout (console output)

 cin (console input)

Trang 15

Dòng nhập/ xuất chuẩn

Sử dụng thư viện theo không gian tên (namespace): C++

trên Net #include <iostream>

using namespace std;

void main() {

cout<<"Tong cua chung:"<<x+y<<"\n";

cout<<"Hieu cua chung:"<<x-y<<"\n";

}

Trang 19

5.3 5.339

Trang 21

Chuyển kiểu dữ liệu

Tự động chuyển kiểu từ kiểu có giá trị thấp thành kiểu có giá trị cao hơn cho phù hợp với phép toan

char short int long float double

Tuy nhiên nếu chuyển ngược lại có thể gây mất dữ liệu  TBD sẽ sinh warning đối với các trường hợp này

Trang 22

• Để hạn chế các lỗi, C++ cung cấp một cách mới sử

dụng 4 loại chuyển kiểu tường minh:

static_cast  reinterpret_cast

const_cast  dynamic_cast float x = static_cast<float>(3)/4;

Trang 23

Không gắn được kiểu dữ liệu với giá trị hằng

Trình debug không biết đến tên hằng

Trang 25

int x=16;

cout <<"Bien x toan cuc:"<<x;

cout<<"Bien x trong ham main:"<<x;

cout<<"Bien x toan cuc:"<<::x;

}

Trang 26

Kiểu có cấu trúc: struct, union, enum

Tên truct, union và enum được xem là tên kiểu dữ liệu

struct và union có thể được xem như lớp

float r, i;

};

Complex c;

Trang 27

new type_name initializer

new ( type_name ) initializer

Nếu cấp phát không thành công thì sẽ trả về giá trị NULL

Trang 31

Hàm inline

Công dụng: chèn code của hàm ngay tại nơi gọi hàm  tăng tốc độ chương trìnhThêm từ khoá inline trước hàm

Trang 32

Hàm inline

Hàm inline sẽ làm cho kích thước chương trình tăng lên  Thường là các hàm nhỏ, ít phức tạp (không được là hàm đệ quy)

inline float CircleArea(float r) {

return (3.14159*r*r);

}

Trang 33

Gọi hàm với danh sách

đối số không đầy đủ

(nếu không thay đổi giá

trị mặc định)

float CircleArea(float r=5); void main()

{

x = CircleArea();//r=5

y = CircleArea(7);

} float CircleArea(float r) {

return (3.1415*r*r); }

Trang 35

Tham số mặc định (default parameter)

int MyFunc(int a= 1, int b , int c = 3, int d = 4); //prototype sai!!! int MyFunc(int a, int b = 2 , int c = 3, int d = 4); //prototype đúng

………

MyFunc(5, 7); //OK, các tham số c và d lấy giá trị mặc định

MyFunc(5, 7, , 8); //Lỗi do các tham số bị bỏ phải liên tiếp nhau

Trang 36

Tham chiếu (reference)

Tham chiếu tới một đối tượng là một bí danh tới đối tượng đó

Có thể xem mọi thao tác trên tham chiếu đều được thực hiện trên chính đối tượng nguồn

Cú pháp:

type_name & variable_name

Trang 37

*p = 9;

cout << "x = " << x << " y = " << y << ".\n"; //x = 9 y = 9

Trang 38

Tham chiếu

Lưu ý

Tham chiếu phải được khởi tạo

int & x; //Error

Nội dung của tham chiếu là địa chỉ của biến mà nó đại diện (tương tự biến con trỏ)

Trang 42

Đa năng hoá (Overloading)

Cho phép đa năng hóa hàm và đa năng hóa toán tử

Là phương pháp cung cấp nhiều hơn một định nghĩa cho tên hàm đã cho trong cùng một phạm viTBD sẽ lựa chọn phiên bản thích hợp của hàm hay toán tử dựa trên các tham số mà nó được gọi

Trang 43

Đa năng hoá (Overloading)

Quá trình gọi hàm đa năng hóa:

Nếu tìm thấy một hàm nào đó của một hàm đa năng hóa có các tham số trùng với các tham số trong gọi hàm  hàm đó được sử dụng

Nếu không TBD tìm một phiên bản của hàm cho phép chuyển kiểu đơn giản nhất

Trang 44

Đa năng hoá (Overloading)

double max(double d1, double d2)

Trang 45

Đa năng hoá

Điều kiện

Số lượng tham số phải khác nhau

Kiểu của tham số phải khác nhau

Nếu cùng số lượng tham số thì phải có ít nhất 1 tham số khác kiểu

Trang 46

Đ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ử

Trang 47

Đ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ại

 Toán tử một ngôi: chỉ có một toán hạng

 Toán tử hai ngôi: có hai toán hạng

Toán tử một ngôi lại chia thành hai loại

 Tiền tố: toán tử đặt trước toán hạng

 Hậu tố: toán tử đặt sau toán hạng

Trang 48

Đa năng hoá toán tử

Trang 49

Từ khóa operator khai báo một hàm chỉ rõ ý nghĩa

của toán tử operator_symbol.

Trang 50

Đ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

Trang 51

Đa năng hoá toán tử

struct Complex {

………

c = c1 + c2;

c = operator + (c1, c2);

Trang 52

Đa năng hoá toán tử

Không thể định nghĩa toán tử mới

 Phần lớn các toán tử được đa năng hóa

 Ngoại trừ các toán tử

* :: ?: typeid sizeof const_cast dynamic_cast reinterpret_cast static_cast

Trang 53

Đ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ẵn

Trong hàm định nghĩa toán tử không có các tham

số có giá trị mặc định

Trang 55

Template

Đượ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ên

Hà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ệu

int Max(int a, int b)

{

return (a>b) ? a : b;

}

Trang 56

Template

Template để 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ại

 Hàm template

 Lớp template

Trang 60

Hàm template

template <class T>

void MyFun(T x) {

Trang 61

Hàm template

template <class T , int n>

int ZeroCount( T x[]) {

int a[10];

… int c=ZeroCount <int,10> (a);

… }

Trang 62

Q&A

Ngày đăng: 04/09/2015, 15:28

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm