Xu Hướng 4/2023 # Toàn Bộ Kiến Thức Cơ Bản Về C++ – Nguyễn Công Trình Tổng Hợp # Top 4 View | Hoisinhvienqnam.edu.vn

Xu Hướng 4/2023 # Toàn Bộ Kiến Thức Cơ Bản Về C++ – Nguyễn Công Trình Tổng Hợp # Top 4 View

Bạn đang xem bài viết Toàn Bộ Kiến Thức Cơ Bản Về C++ – Nguyễn Công Trình Tổng Hợp được cập nhật mới nhất trên website Hoisinhvienqnam.edu.vn. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất.

Tổng quan về C++

C++ là một ngôn ngữ lập trình kiểu tĩnh,dữ liệu trừ tượng, phân biệt kiểu chữ thường chữ hoa mà hỗ trợ lập trình hướng đối tượng, lập trình thủ tục.

C++ được coi như là ngôn ngữ bậc trung (middle-level), khi nó kết hợp các đặc điểm và tính năng của ngôn ngữ bậc cao và bậc thấp.

C++ được phát triển bởi Bjarne Stroustrup năm 1979 tại Bell Labs ở Murray Hill, New Jersey, như là một bản nâng cao của ngôn ngữ C và với tên gọi đầu tiên là « C với các Lớp », nhưng sau đó được đổi tên thành C++ vào năm 1983.

C++ là một Superset của C, và bất kỳ chương trình C nào cũng là một chương trình C++.

Cấu trúc một chương trình trong C++

1.   Statements

Khai báo tên các tệp chứa những thành phần có sẵn ( các hằng chuẩn, kiểu chuẩn và hàm chuẩn) mà người sử dụng sẽ sử dụng trong chương trình.

Ví dụ:

int x;

x = 5;

std::cout << x;

2. Expressions

Trình biên dịch cũng có khả năng giải quyết các biểu thức. Biểu thức xác định một tính toán sẽ được thực hiện.

Ví dụ, tất cả chúng ta đều học rằng 2 + 3 bằng 5. Trong lập trình, chúng ta nói rằng 2 + 3 là một biểu thức đánh giá giá trị 5

Ví dụ:

2

« Hello, world »

x

2 + 3

x = 5

(2+x)*(y-3)

std::cout << x

3. Functions

Trong C ++, các câu lệnh thường được nhóm thành các đơn vị gọi là hàm. Hàm là một tập hợp các câu lệnh thực thi tuần tự. Mỗi chương trình C ++ phải chứa một hàm đặc biệt gọi là main.Các chức năng thường được viết để làm một công việc rất cụ thể.

Ví dụ:

int main()

{

int a;

if (a <4){

cout << « so nho hon 4″<< endl;

} else{

cout << « so lon hon 4″<< endl;

}

system(« pause »);

return 0;

}

Các kiểu dữ liệu trong C++

Ví dụ:

#include

using namespace std;

int main()

{

cout << « Kich thuoc cua char la:  » << sizeof(char)<< endl;

cout << « Kich thuoc cua int la:  » << sizeof(int)<< endl;

cout << « Kich thuoc cua short int la:  » << sizeof(short int)<< endl;

cout << « Kich thuoc cua long int la:  » << sizeof(int)<< endl;

cout << « Kich thuoc cua float la:  » << sizeof(float)<< endl;

cout << « Kich thuoc cua double la:  » << sizeof(double)<< endl;

cout << « Kich thuoc cua wchar_t la:  » << sizeof(wchar_t)<< endl;

system(« pause »);

return 0;

}

Biến trong C++

Trong C++, biến có thể được khai báo ở bất kì địa điểm nào trong chương trình trước khi sử dụng.

Tên của một biến :

Bắt đầu bằng dấu gạch dưới “_” hoặc chữ cái.Tên biến có thể là chữ hoa hoặc chữ thường như là a-z hoặc A-Z. Trong C phân biệt chữ hoa chữ thường.

Tên biến có thể bao gồm chữ cái, chữ số, và dấu gạch dưới.

Không bao gồm các kĩ tự đặc biệt như là !, %, ], $.

Không bao gồm khoảng trống.

Không được trùng tên với từ khóa.

Không nên dài quá 32 kí tự.

Cách khai báo biến

Khai báo không khởi tạo

Tên_kiểu  Tên_biến;

Ví dụ:

int i, j;

float x;

char c,d[100];

Khai báo khởi tạo

Tên_kiểu  Tên_biến = Giá_trị;

Ví dụ:

int a = 5;

float b = 6.5;

string st = « nhom 1 »;

Con trỏ trong C++

Khai báo:

Kiểu_dữ_liệu *tên_con_trỏ

Ví dụ:

int *iPtr; float *fPtr; double *dPtr; int *iPtr1, *iPtr2;

Lưu ý: Dấu sao trong khai báo con trỏ không phải là toán tử trỏ đến (dereference operator), nó chỉ là cú pháp được ngôn ngữ C/C++ quy định.

Cách khai báo dễ gây nhầm lẫn

int *iPtr1;

Nhưng mình khuyến nghị các bạn sử dụng cách khai báo đặt dấu sao ngay trước tên con trỏ vì cách thứ hai có thể gây nhầm lẫn.

int* iPtr1, iPtr2;

Với cách khai báo này, iPtr1 là một con trỏ kiểu int, trong khi đó, iPtr2 là một biến kiểu int. Để có được hai con trỏ, chúng ta cần khai báo như sau:

int *iPtr1, *iPtr2;

Gán giá trị cho con trỏ

Giá trị mà biến con trỏ lưu trữ là địa chỉ của biến khác có cùng kiểu dữ liệu với biến con trỏ.

int *ptr;

int value = 5;

ptr = &value;

Do đó, chúng ta cần sử dụng address-of operator để lấy ra địa chỉ ảo của biến rồi mới gán cho con trỏ được. Lúc này, biến ptr sẽ lưu trữ địa chỉ ảo của biến value.

Chúng ta có thể nói rằng con trỏ ptr đang nắm giữ địa chỉ của biến value, cũng có thể nói con trỏ ptr trỏ đến biến value.

Đoạn chương trình sau sẽ in ra địa chỉ của biến value và giá trị được lưu bởi con trỏ ptr sau khi trỏ đến biến value:

int main() {

int value = 5;

int *ptr = &value;

cout << &value << endl; cout << ptr << endl;

system(« pause »);

return 0;

}

Kết quả : 0012FF7C

0012FF7C

Lý do mà chúng ta gán được địa chỉ của biến value cho con trỏ kiểu int (int *) là vì address-of operator của một biến kiểu int trả về giá trị kiểu con trỏ kiểu int (int *).

Bên cạnh đó, khi có hai con trỏ cùng kiểu thì chúng ta có thể gán trực tiếp mà không cần sử dụng address-of operator.

Ví dụ:

int main() {

int value = 5;

int *ptr1, *ptr2; ptr1 = &value;

ptr2 = ptr1;

cout << ptr1 << endl; cout << ptr2 << endl;

system(« pause »);

return 0;

}

Lúc này, ptr1 và ptr2 cùng giữ địa chỉ của biến value.

Khác với tham chiếu (reference), một con trỏ có thể trỏ đến địa chỉ khác trong bộ nhớ ảo sau khi đã được gán giá trị. Tham chiếu (reference) không thể thay đổi địa chỉ sau lần tham chiếu đầu tiên.

Ví dụ:

int main() {

int *ptr;

int arr[5] = { 1, 2, 3, 4, 5 };

for(int i = 0; i < 5; i++) {

ptr = &arr[i]; cout << ptr << endl;

}

system(« pause »);

return 0;

}

Các phép gán không hợp lệ khi sử dụng con trỏ

Phép gán của con trỏ chỉ thực hiện được khi kiểu dữ liệu của con trỏ phù hợp kiểu dữ liệu của biến mà nó sẽ trỏ tới.

int iValue = 0;

float fValue = 0.0;

int *i_ptr = fValue;

float *f_ptr = iValue;

Mặc dù giá trị mà con trỏ lưu trữ có kiểu unsigned int, nhưng chúng ta không thể gán trực tiếp một giá trị địa chỉ cho con trỏ được.

int *ptr = 1245052;

Giá trị 1245052 không có địa chỉ cụ thể, trong khi đó, con trỏ chỉ nhận giá trị là địa chỉ nên phép gán trên là sai. Mặc dù giá trị được chuyển về dạng cơ số thập lục phân để tương xứng với định dạng giá trị mà con trỏ in ra, điều này cũng không được cho phép.

int *ptr = 0012FF7C;

Chỉ có giá trị kiểu con trỏ (có được nhờ toán tử address-of, hoặc từ một biến con trỏ cùng kiểu khác) mới có thể gán được cho biến con trỏ.

Truy xuất giá trị bên trong vùng nhớ mà con trỏ trỏ đến

Khi chúng ta có một con trỏ đã được trỏ đến địa chỉ nào đó trong bộ nhớ ảo, chúng ta có thể truy xuất giá trị tại địa chỉ đó bằng dereference operator. Dereference operator sẽ đánh giá nội dung địa chỉ được trỏ đến.

Ví dụ:

int *ptr;

int value = 5;

ptr = &value;

cout << &value << endl;

cout << ptr << endl;

cout << value << endl;

cout << *(&value) << endl;

cout << *ptr << endl;

Đối với con trỏ, NULL là một giá trị đặc biệt, khi gán NULL cho con trỏ, điều đó có nghĩa là con trỏ đó chưa trỏ đến địa chỉ nào cả. Con trỏ đang giữ giá trị NULL được gọi là con trỏ NULL (NULL pointer).

int *ptr = NULL;

Struct, mảng trong C++

structure – cấu trúc là một loại dữ liệu khác trong ngôn ngữ lập trình C/C++, cho phép bạn kết hợp các dữ liệu khác kiểu nhau.

Để định nghĩa cấu trúc, bạn phải sử dụng câu lệnh struct. Câu lệnh struct định nghĩa một kiểu dữ liệu mới, với hơn một thành viên trong chương trình của bạn. Dạng tổng quát của câu lệnh struct như sau đây:

struct [ten cau truc]

{

phan dinh nghia thanh vien;

phan dinh nghia thanh vien;

phan dinh nghia thanh vien;

} [mot hoac nhieu bien cau truc];

Ví dụ:

struct Books

{

char  tieude[50];

char  tacgia[50];

char  chude[100];

int   book_id;

}book;

Truy cập các thành viên của cấu trúc trong C++

#include

#include

using namespace std;

struct Books

{

char  tieude[50];

char  tacgia[50];

char  chude[100];

int   book_id;

};

int main( )

{

struct Books QuyenSach1;       

struct Books QuyenSach2;       

// chi tiet ve quyen sach thu nhat

strcpy( QuyenSach1.tieude, « Ngon ngu Lap trinh C++ »);

strcpy( QuyenSach1.tacgia, « Pham Van At »);

strcpy( QuyenSach1.chude, « Lap trinh »);

QuyenSach1.book_id = 1225;

// in thong tin ve QuyenSach1

cout << « Tieu de cua Quyen sach thu nhat la:  » << QuyenSach1.tieude <<endl;

cout << « Tac gia cua Quyen sach thu nhat la:  » << QuyenSach1.tacgia <<endl;

cout << « Chu de cua Quyen sach thu nhat la:  » << QuyenSach1.chude <<endl;

cout << « ID cua Quyen sach thu nhat la:  » << QuyenSach1.book_id <<endl;

return 0;

}

Mảng

Mảng gồm 2 loại: Mảng tĩnh và Mảng động

Mảng tĩnh

Mảng một chiều:

Kích thước được xác định ngay khi khai báo và không bao giờ thay đổi.

Cách khai báo mảng:

Phải xác định cụ thể số phần tử ngay lúc khai báo.

int n1=10;

int a [n1];

Const int n2 =20; int b[n2];

Nên sử dụng chỉ thị tiền xử lí #define để định nghĩa về số phần tử của mảng.

#define n1 10

#define n2 20

int a [n1]; ó int a[10];

int b [n1][n2]; ó int b[10][20];

Khởi tạo giá trị cho mảng.

Khởi tạo giá trị cho mọi phần tử của mảng.

int a[4] = {1012,1032,2012,1034};

Khởi tạo giá trị cho một số phần tử đầu mảng

int a[4] = {2012,1023};

Khởi tạo giá trị 0 cho mọi phần tử mảng.

int a[4] = {0};

Tự động xác định số phần tử mảng.

int a[] = {1012,1032,2012,1034};

Mảng động

Biến con trỏ dùng để lưu địa chỉ của những biến khác hay địa chỉ của một vùng nhớ hợp lệ, được phép dùng.

Cần dùng bao nhiêu thì cấp bấy nhiêu không cấp dư.

int *p;

int a =5;

p =&a;

*p=15;

//a=15

}

{

int *p;

p=new int;

*p=8;

delete p;

}

Các câu lệnh điều kiện, vòng lặp trong C++

Câu lệnh điều kiện.

Câu lệnh điều kiện if

Cấu trúc câu lệnh if thiếu

If ( điều kiện)

{

Thân của if gồm lệnh hoặc  khối lệnh

}

Cấu trúc câu lệnh if đủ

If ( điều kiện)

{

Thân của if gồm lệnh hoặc  khối lệnh

}

Else

{

Khối lệnh}

Ví dụ:

#include

using namespace std;

int main()

{

int a;

cout << « so nho hon 4″<< endl;}

else{

cout << « so lon hon 4″<< endl;}

system(« pause »);

return 0;

}

Câu lệnh điều kiện Swicth-case

Cấu trúc:

Switch ( giá trị hay biểu thức)

{

Case1:{ lựa chọn 1

}break;

Case1:{ lựa chọn 1

}break;

}

Default:

{cout  << “….” << endl;

}}

Ví dụ:

#include

using namespace std;

int main()

{

int luachon;

switch(luachon)

{

case 1: {

cout << « ban chon so 1 »;

break;

}

case 2: {

cout << « ban chon so 2 »;

break;

}

}

system (« pause »);

return 0;

}

Vòng lặp.

Trong C++ có ba vòng lặp chính : While, Do –While, for.

Vòng lặp While

Cú pháp:

While (Biểu thức logic)

{ thân vòng lặp while (lệnh hoặc đoạn lệnh)

}

Ví dụ:

#include

using namespace std;

//viet1 chuong trinh in ra cac so tu 0-100

int main()

{

int a =0;

while(a<=100){

cout << a << endl;

a++;

}

system (« pause »);

return 0;

}

===========

+Kênh youtube chính của tớ : https://www.youtube.com/channel/UCmh5eroSubN_w1J4u19d6_Q +facebook cá nhân :https://www.facebook.com/NguyenCongTrinh113

===========

Vòng lặp Do- While

Cú pháp:

Do

{ lệnh, khối lệnh

} while( biểu thức logic- điều kiện vòng lặp);

Ví dụ:

#include

using namespace std;

int main()

{

int n;// khai bao bien n

do {

}while(n<=0);

{

cout << « gia tri n la: »<< n<< endl;

}

system (« pause »);

return 0;

}

Vòng lặp for

Cú pháp:

{ lệnh, đoạn lệnh

}

Ví dụ:

#include

using namespace std;

//

int main(){

int i,n;

for(i=0;i<n;i++){

cout << « gia tri n la: »<< i<< endl;

}

system (« pause »);

return 0;

}

 Lập trình hướng đối tượng trong C++

Đối tượng và các lớp trong C++

Object (đối tượng) nghĩa là một thực thể trong thế giới thực, chẳng hạn như: bàn, quả bóng, con bò, … Lập trình hướng đối tượng là một phương pháp để thiết kế một chương trình bởi sử dụng các lớp và các đối tượng. Nó làm đơn giản hóa việc duy trì và phát triển phần mềm bằng việc cung cấp một số khái niệm.

Về cơ bản, một đối tượng (objects) được tạo từ một lớp.

Khai báo các đối tượng của một lớp giống đúng như chúng ta khai báo các biến của kiểu cơ bản.

4 tính chất của đối tượng:

Tính trừu tượng (Abstraction)

Tính đóng gói (Escapsulation)

Tính kế thừa (Inheritance)

Tính đa hình (polymorphism)

Tính trừu tượng (Abstraction): Tập trung vào cốt lõi của đối tượng, bỏ qua những thứ không lien quan và không quan trọng. Bao hàm các điểm chung để xâu ra bên ngoài.

Tính đóng gói (Escapsulation): Tính chất không cho phép người dung hay đối tượng khác thay đổi dữ liệu thành viên của đối tượng nội tại, chỉ có các hàm thành viên của đối tượng đó mới có quyền thay đổi trạng thái nội tại của nó, truy cập thông tin qua phương thức get/set.

Đặc điểm của tính chất đóng gói dữ liệu:

Tạo ra các cơ chế để ngăn ngừa về việc gọi phương thức của lớp này tác động truy xuất dữ liệu của lớp đối tượng thuộc về lớp khác.

Người lập trình có thể dựa vào cơ chế này để ngăn ngừa việc gán giá trị không hợp lệ vào thành phần dữ liệu của mỗi đối tượng.

Không cho truy xuất 1 cách tùy tiện dữ liệu của class nôi tại.

Tính kế thừa (Inheritance)

Kế thừa , tái sử dụng phương thức, thuộc tính của lớp cơ sở.

Lớp kế thừa được gọi là lớp con, nó sẽ thừa hưởng những gì lớp cha có và cho phép.

Tính đa hình (polymorphism)

Tính đa hình cho phép các chức năng  (method) khác nhau được thực thi khác nhau trên các đối tượng khác nhau. Hay nói cách khác đa hình là cùng phương thức khác nhau về hình thể.

Lớp C++

Một định nghĩa lớp trong C++ bắt đầu với từ khóa class, được theo sau bởi tên lớp và phần thân lớp, được bao quanh trong một cặp dấu ngoặc móc. Một định nghĩa lớp phải được theo sau: hoặc bởi một dấu chấm phảy hoặc một danh sách các khai báo.

Ví dụ, chúng ta định nghĩa kiểu dữ liệu SinhVien bởi sử dụng từ khóa class trong C++ như sau:

class SinhVien

{

private:

string hoten;

string masv;

float diem;

public:

void Nhap_thong_tin();

void Xuat_thong_tin();

protected:

string email;

}

Từ khóa public quyết định các thuộc tính truy cập của các thành viên lớp mà theo sau nó. Một thành viên public có thể được truy cập từ bên ngoài lớp bất cứ đâu bên trong phạm vi (scope) của đối tượng lớp đó.

Tạo ra các cơ chế để ngăn ngừa về việc gọi phương thức của lớp này tác động truy xuất dữ liệu của lớp đối tượng thuộc về lớp khác.

Người lập trình có thể dựa vào cơ chế này để ngăn ngừa việc gán giá trị không hợp lệ vào thành phần dữ liệu của mỗi đối tượng.

Không cho truy xuất 1 cách tùy tiện dữ liệu của class nôi tại.

Tính kế thừa (Inheritance)

Kế thừa , tái sử dụng phương thức, thuộc tính của lớp cơ sở.

Lớp kế thừa được gọi là lớp con, nó sẽ thừa hưởng những gì lớp cha có và cho phép.

Tính đa hình (polymorphism)

Tính đa hình cho phép các chức năng  (method) khác nhau được thực thi khác nhau trên các đối tượng khác nhau. Hay nói cách khác đa hình là cùng phương thức khác nhau về hình thể.

Lớp C++

Một định nghĩa lớp trong C++ bắt đầu với từ khóa class, được theo sau bởi tên lớp và phần thân lớp, được bao quanh trong một cặp dấu ngoặc móc. Một định nghĩa lớp phải được theo sau: hoặc bởi một dấu chấm phảy hoặc một danh sách các khai báo.

Ví dụ, chúng ta định nghĩa kiểu dữ liệu SinhVien bởi sử dụng từ khóa class trong C++ như sau:

class SinhVien

{

private:

string hoten;

string masv;

float diem;

public:

void Nhap_thong_tin();

void Xuat_thong_tin();

protected:

string email;

}

Từ khóa public quyết định các thuộc tính truy cập của các thành viên lớp mà theo sau nó. Một thành viên public có thể được truy cập từ bên ngoài lớp bất cứ đâu bên trong phạm vi (scope) của đối tượng lớp đó.

Từ khóa private và protected thể hiện tính đóng gói trong C++.

Các thành viên dữ liệu public của các đối tượng của một lớp có thể được truy cập bởi sử dụng toán tử truy cập thành viên trực tiếp là dấu chấm (.).

Ví dụ:

#include

#include

using namespace std;

class SinhVien

{

private:

string hoten;

string masv;

float diem;

public:

void Nhap_thong_tin();

void Xuat_thong_tin();

protected:

string email;

//ham tao và ham huy

//          sinhvien();

//~sinhvien();

};

void sinhvien::Nhap_thong_tin()

{

cout << « Nhap ho ten: « ;

getline (cin,hoten);

cout << « masv: « ;

//fflush(stdin);

getline (cin,masv);

}

void sinhvien::Xuat_thong_tin()

{

cout << « ho ten: »<< hoten<<endl;

cout << « ma so: »<< masv<<endl;

cout << « diem: »<< diem<<endl;

}

int main()

{

sinhvien NguyenVanA;

//cout <<« Nhap_thong_tin »<<endl;

NguyenVanA.Nhap_thong_tin();

//cout << « Xuat_thong_tin »<<endl;

NguyenVanA.Xuat_thong_tin();

system (« pause »);

return 0;}

Constructor & Destructor trong C++

Một class constructor là một hàm đặc biệt trong một lớp mà được gọi khi một đối tượng mới của lớp đó được tạo. Một class destructor cũng là một hàm đặc biệt mà được gọi khi đối tượng đã tạo bị hủy.

Copy Constructor trong C++: copy constructor là một constructor mà tạo một đối tượng bằng việc khởi tạo nó với một đối tượng của cùng lớp đó, mà đã được tạo trước đó.

Hàm Friend trong C++: hàm friend được cho phép truy cập tới các thành viên là private và protected của một lớp.

Hàm Inline trong C++: với một hàm inline, trình biên dịch cố gắng mở rộng code trong thân hàm thế chỗ cho một lời gọi tới hàm đó.

Con trỏ this trong C++: mỗi đối tượng có một con trỏ this đặc biệt, mà trỏ tới chính đối tượng đó.

Con trỏ tới lớp trong C++: một con trỏ tới một lớp được thực hiện giống hệt như cách một con trỏ tới một cấu trúc. Thực ra, một lớp là một cấu trúc với các hàm trong nó.

Bộ tiền xử lí

Bộ tiền xử lý (Preprocessor) là các directive (chỉ thị), cung cấp chỉ lệnh tới bộ biên dịch để tiền xử lý thông tin trước khi bắt đầu biên dịch thực sự.

Tất cả chỉ thị tiền xử lý (Preprocessor directive) bắt đầu với #, và chỉ có các ký tự khoảng trống trắng là có thể xuất hiện ở trước một chỉ thị tiền xử lý trên một dòng. Chỉ thị tiền xử lý không là các lệnh trong C++, vì thế chúng không kết thúc với một dấu chấm phảy.

VD: Chỉ thị tiền xử lý là #include trong tất cả ví dụ. Macro này được sử dụng để bao một Header file vào trong source file.

Có một số chỉ thị tiền xử lý được hỗ trợ bởi C++ như #include, #define …

Bộ tiền xử lý # define trong C++

Chỉ thị tiền xử lý #define tạo các biểu tượng hằng. Biểu tượng hằng là một macro và mẫu chung của chỉ thị tiền xử lý này trong C++ là:

#define ten_cua_macro ten_thay_the

Khi dòng này xuất hiện trong một file, tất cả macro xuất hiện theo sau trong file này sẽ được thay thế bởi ten_thay_the trước khi chương trình được biên dịch.

Ví dụ:

#include

using namespace std;

#define PI 3.14159

int main () {

int main () {

cout << « Gia tri cua PI la:  » << 3.14159 << endl; return 0;

}

Biên dịch có điều kiện trong C++

Có một số chỉ thị tiền xử lý có thể sử dụng để biên dịch có sự tuyển chọn giữa các phần trong source code của bạn. Tiến trình này được gọi là biên dịch có điều kiện.

Chỉ lệnh tiền xử lý có điều kiện khá giống với cấu trúc lựa chọn if.

Ví dụ:

#ifndef NULL

#define NULL 0

#endif

Có thể biên dịch một chương trình với mục đích debug và có thể tắt hoặc bật việc debug này bởi sử dụng một macro trong C++, như sau:

#ifdef DEBUG cerr <<« Bien x =  » << x << endl;

#endif

Lệnh cerr để được biên dịch trong chương trình nếu biểu tượng hằng DEBUG đã được định nghĩa ở trước chỉ thị #ifdef DEBUG. Có thể sử dụng lệnh #if 0 để chú thích một phần của chương trình, như sau:

#if 0

khong duoc bien dich phan code nay

#endif

Static and dynamic library

Thư viện (library) là một tập mã nguồn đã được đóng gói, có thể được tái sử dụng trong nhiều chương trình khác nhau.

Thư viện trong ngôn ngữ C++ gồm 2 thành phần chính:

Những header files khai báo các hàm có thể được sử dụng trong chương trình.

Tập hợp mã nguồn đã được biên dịch thành mã máy tương ứng với phần định nghĩa của các hàm đã được khai báo trong các header files.

Nhiều thư viện khi cung cấp đã được biên dịch sẵn vì nhiều lý do. Thông thường, hiếm khi có sử chỉnh sửa trong phần thư viện, nên không cần phải biên dịch nhiều lần. Thư viện cũng được biên dịch sẵn thành mã máy để tránh người dùng truy cập và chỉnh sửa.

Có 2 kiểu thư viện: thư viện liên kết tĩnh (static library) và thư viện liên kết động (dynamic library).

Thư viện liên kết động – Dynamic Link library

Trong Windows thì các file thư viện này có đuôi là .dll, trong các hệ điều hành họ Linux thì chúng có đuôi là .so, trên MacOS thì là .dylib. Trong đó chứa  code, class, hàm… tất nhiên là không phải các loại code như C++, Java… mà là mã nhị phân, là ngôn ngữ bậc thấp của hệ điều hành, do đó chúng ta không thể mở nó ra như mở file text được. Khi chúng ta viết phần mềm bằng các ngôn ngữ cao cấp như Pascal, C++… thì các mã nguồn này sẽ được dịch dần dần qua mã Assembly rồi tới mã nhị phân. Các chương trình (hay các file .exe) có sử dụng đến thư viện liên kết động sẽ đọc code trong các file .dll (hay .so trên linux…) này để sử dụng trong quá trình chạy.

Ưu điểm:

Thư viện liên kết động giảm thiểu số lượng code có trong chương trình của bạn, do đó chương trình bạn viết ra sẽ luôn gọn nhẹ hơn so với dùng thư viện liên kết tĩnh.

Thư viện liên kết động cho phép nhiều chương trình sử dụng nó một cách trực tiếp mà không cần phải biên dịch lại.

Nhược điểm:

Sử dụng thư viện liên kết động sẽ làm cho thời gian chạy chương trình lâu hơn do phải truy cập file, đọc file… từ đĩa cứng… vốn là công việc đòi hỏi thời gian.

Thư viện liên kết tĩnh – Static library

Trong Windows thì chúng có đuôi .lib, trong Linux là .a. Cũng giống với thư viện liên kết động, thư viện liên kết tĩnh cũng chứa code  nhị phân, chỉ khác là chúng được các chương trình gọi tới trong quá trình biên dịch. Khi chương trình của chúng ta được dịch từ các ngôn ngữ cấp cao sang mã nhị phân, chúng sẽ copy cả mã nguồn của các file thư viện tĩnh này vào trong mã nguồn của mình, tức là bây giờ code trong file .exe của bạn sẽ bao gồm code của cả file thư viện.

Vậy tóm lại thư viện liên kết động gọi hàm từ các file .dll (hoặc .so) để chạy

Thư viện liên kết tĩnh thì copy code trong file .lib (hoặc .a) vào file .exe của mình để chạy. Vậy khi các file thư viện bị lỗi, chương trình của bạn có thể sẽ chỉ báo lỗi trong khi chạy nếu dùng file .dll, còn nếu dùng file .lib thì thư viện của bạn không thể chạy được, nói đúng hơn là không thể dịch được khi bị lỗi.

Nhược điểm:

Thư viện liên kết tĩnh chúng sẽ làm cho chương trình của bạn phình to ra do phải copy code trong thư viện vào code của chính nó.

Ưu điểm:

Tuy nhiên chương trình của bạn sẽ chạy rất nhanh, bởi vì chúng không mất thời gian mở các file .dll ra để đọc code, chúng đã có sẵn code trong RAM cùng với code của mình rồi, vì tốc độ đọc ghi trong RAM nhanh hơn tốc độ đọc ghi trong đĩa cứng rất nhiều lần.

Nguồn được tổng hợp từ : https://cpp.daynhauhoc.com

===========

Liên hệ : https://nguyencongtrinh1995.tumblr.com/

or :

kythuatysinhblog.wordpress.com/blog/

**Mọi đóng góp để blog phát triển hơn xin gửi vào tài khoản sau : Số tài khoản 103001836696 -Thẻ Viettinbank -Chủ thẻ Nguyễn Công Trình.

Partager :

Partager

Twitter

Facebook

Imprimer

LinkedIn

Reddit

Tumblr

Pinterest

Pocket

Telegram

WhatsApp

Skype

E-mail

WordPress:

J’aime

chargement…

Articles similaires

Auteur :

Nguyễn Công Trình -Biomedical

Nguyễn Công Trình -KTYS K13 A +https://medium.com/@nguyncngtrnh +facebook : https://www.facebook.com/NguyenCongTrinh113 Voir tous les articles par Nguyễn Công Trình -Biomedical

Tổng Hợp Toàn Bộ Các Lệnh Trong Minecraft

MineCraft có thể nói là một tựa game đình đám và là một siêu phẩm nổi tiếng trên thế giới và sở hữu một lượng người chơi rất lớn. Trong MineCraft là cả một thế giới ảo giúp bạn thỏa sức sáng tạo xây dựng các công trình, thế giới của riêng mình. Và để tạo ra thế giới của riêng mình, người chơi không chỉ cần có óc sáng tạo mà còn cần đến kiến thức về các mã lệnh trong game. Chính vì vậy ở bài viết này chúng tôi sẽ tổng hợp cho các bạn toàn bộ mã lệnh trong game MineCraft. Mời các bạn cùng theo dõi.

/resident: Hiển thị thông tin của chính bạn trên màn hình.

/resident friend clearlist: Loại bỏ tất cả người chơi ra khỏi danh sách bạn bè.

a. Lệnh Town cơ bản

/town withdraw: Rút tiền khỏi ngân hàng town.

/town: Hiển thị thông tin town bạn đang tham gia.

/town unclaim: Bán đất của town.

/town help: Hiển thị các lệnh bạn có thể sử dụng trong town.

/town leave: Rời khỏi town hiện tại.

/town claim: Mua đất cho town.

/town deposit: Chuyển tiền vào ngân hàng town.

b. Lệnh Town mở rộng

/town set spawn: Set vị trí spawn cho town

/town set perm: Cài đặt các chính sách cho town.

/townchat: Chuyển sang chế độ chat town.

/town set perm build on/off: Bật/tắt chế độ xây dựng trong town.

/town set perm destroy on/off: Bật/tắt chế độ phá block trong town.

/town set perm switch on/off: Bật/tắt công tắc trong town.

/town set perm itemuse on/off: Bật/tắt quyền sử dụng item với bất cứ ai trong town.

/town set perm {resident/ally/outsider} {build/destroy/switch/itemuse} {on/off}: Bật/tắt xây dựng phá block / công tắc / sử dụng đối với cư dân / đồng minh / người ngoài.

d. Lệnh Town toggle

/town toggle open: Cho phép mở cửa để thành viên tham gia thoải mái hoặc đóng cửa.

/town toggle explosion: Cho phép hoặc không cho phép nổ trong town.

/town toggle pvp: Cho phép hoặc không cho phép PVP (đánh nhau) trong town.

/town toggle taxpercent: Quy định thuế theo kiểu phần trăm hay số xác định.

/town toggle public: Cho phép hoặc không cho phép người khác spawn đến town bạn.

/town toggle fire: Cho phép hoặc không cho phép lửa cháy trong town.

/town toggle mobs: Cho phép hoặc không cho phép mobs (quái vật) sinh ra trong town.

/resident toggle spy: Quản trị viên có thể bật chat kênh gián điệp.

/resident toggle map: Bật bản đồ khi di chuyển qua đường ranh giới của plot.

/resident toggle reset: Tắt tất cả chế độ (ở trên) đang hoạt động.

/resident toggle plotborder: Lệnh để hiện đường ranh giới plot khi bạn di chuyển qua nó.

3. Các lệnh Plot trong game MineCraft

/nation: Hiển thị thông tin quốc gia của người chơi.

/nation list: Liệt kê danh sách các quốc gia.

/nation online: Hiển thị người chơi đang online trong quốc gia của bạn.

Tổng Hợp Các Hàm Cơ Bản Trong Excel

Có thể nói Excel là một trong các công cụ không thể thiếu đối với người dùng văn phòng, Chúng giúp thực hiện tính toán dữ liệu trực tiếp trên bảng tính nhanh và tiện lợi hơn. Vậy với bài viết này chúng ta sẽ tổng hợp lại các hàm excel thường dùng cho văn phòng.

1. Hàm tính tổng SUM

Đây có thể nói là hàm đầu tiên mà bất kỳ người dùng nào mới học Excel cũng cần phải biết đến. Giả sử, bạn muốn cộng các con số trong ô A2 và B2 lại với nhau, sau đó hiển thị kết quả trong ô B3. Để thực hiện, bạn chỉ cần di chuyển đến ô B3 và gõ cụm từ “=SUM” vào rồi chọn hàm =SUM vừa xuất hiện trong danh sách nổi lên.

Tính tổng các ô trong một vùng thỏa mãn một điều kiện cho trước.

– Cú pháp: =SUMIF(range, criteria, sum_range)

– Các tham số:

+ Range : Vùng tính tổng, có thể là ô chứa số, tên, mảng, hay tham chiếu đến các ô chứa số. Nếu ô rỗng hoặc chứa text sẽ được bỏ qua khi tính tổng.

+ Criteria : Điều kiện tính tổng (có thể ở dạng số, biểu thức hoặc text). Ví dụ: 907, “907”, “<=907”, “*ee*”, …

+ Sum_range : Là vùng để tính tổng. Nếu để trống thì sum_range = range.

* Khi điều kiện để tính tổng là text (ký tự), SUMIF không phân biệt chữ thường hay chữ hoa.

Để tính tổng các ô dựa trên một điều kiện (ví dụ, lớn hơn 9), hãy sử dụng hàm SUMIF sau (hai đối số).

Tương tự như SUMIF, COUNTIF bạn có thể sử dụng AVERAGEIF và AVERAGEIFS, để tính giá trị trung bình của các ô dựa trên một hoặc nhiều tiêu chí.

Đếm số ô chứa số trong tập các đối số.

– Cú pháp: =COUNT(value1, value2, …)

– Các tham số: các đối số dùng để đếm.

– Ví dụ:

* Các đối số để đếm bao gồm số, ngày tháng còn các giá trị lỗi, ô trống, text không chuyển đổi thành số sẽ được bỏ qua.

Đếm số các giá trị thỏa mãn điều kiện cho trước.

– Cú pháp: =COUNTIF(range, criteria)

– Các tham số:

+ Range: Tập hợp các ô để đếm. Tập hợp này có thể là số, text, tên, mảng, hay tham chiếu đến các ô chứa số. Ô rỗng sẽ được bỏ qua.

+ Criteria: Điều kiện đếm (có thể ở dạng số, biểu thức hoặc text). Ví dụ: 907, “907”, “<=907”, “*ee*”, …

* Khi điều kiện để đếm là text (ký tự), COUNTIF không phân biệt chữ thường hay chữ hoa.

Để lấy những ký tự bên trái của một chuỗi sử dụng hàm LEFT. Công thức =LEFT(ô chứa chuỗi cần lấy, số ký tự muốn lấy)

– Cú pháp: =DAY(serial_number)

=MONTH(serial_number)

=YEAR(serial_number)

– Các tham số: serial_number: Biểu thức ngày tháng hoặc là một giá trị số chỉ giá trị ngày tháng.

– Ví dụ: Nếu hôm nay là ngày 14/07/2017, thì khi bạn gõ =DAY(TODAY()) → 14; =MONTH(TODAY()) → 7; =YEAR(TODAY()) → 2017.

Hướng Dẫn Cơ Bản Về Pivot Table Trong Excel Để Tổng Hợp Dữ Liệu

Pivot Table là một công cụ hữu ích trong Excel, dùng để tổng hợp dữ liệu theo yêu cầu từ một bảng dữ liệu có sẵn. Công cụ này có tính linh hoạt cao nên người dùng có thể điều chỉnh nhanh chóng theo nhu cầu tổng hợp dữ liệu của mình. Bài viết sau đây sẽ hướng dẫn các bạn cách tạo Pivot Table bằng ví dụ minh họa cụ thể, dễ hiểu.

Ta có danh sách về chi tiêu Quí 1 của một gia đình như sau:

Chẳng hạn bạn muốn thống kê chi tiêu cả Quí 1 theo các khoản mục, bạn sử dụng Pivot Table theo các bước như sau:

Vào tab Insert trên thanh thực đơn, nhấn vào biểu tượng PivotTable (hoặc nhấn vào mũi tên ở ngay dưới biểu tượng, chọn PivotTable):

Hộp thoại Create Pivot Table hiện ra với địa chỉ của mảng dữ liệu được chọn tại mục Select a table or range:

Trường hợp muốn sử dụng nguồn dữ liệu ngoài thì bạn tích chọn Use an external data source, sau đó nhấn Choose Connection để chọn dữ liệu ngoài.

Tại mục Choose where you want the Pivot Table report to be placed, bạn tích chọn New Worksheet nếu muốn đặt báo cáo PivotTable ở một sheet mới.

Trong ví dụ này, ta chọn Existing Worksheet để đặt báo cáo tại cùng một sheet với dữ liệu. Khi đó, bạn phải nhấn vào biểu tượng bên cạnh Location để chọn vị trí. Một cửa sổ nhỏ xuất hiện để bạn chọn vị trí, bạn nhấn vào ô mà bạn muốn đặt PivotTable, chẳng hạn ô E2:

Bây giờ chúng ta sẽ tạo PivotTable thông qua bảng PivotTable Field List. Bảng này có 3 phần:

Choose fields to add to report: Chọn trường để thêm vào báo cáo.

Drag fields between areas below: Kéo trường giữa các vùng bên dưới:

Report Filter: Bộ lọc

Column Labels: Cột

Row Labels: Hàng

Values: Giá trị

Defer Layout Update: Trì hoãn cập nhật bố trí.

Nếu không tích chọn: Mỗi thao tác chọn trường, kéo thả trường ở 4 vùng đều sẽ hiển thị ngay trên PivotTable cho bạn thấy.

Theo mặc định:

Các trường không phải là số sẽ được thêm vào vùng Row Labels.

Các trường ngày và giờ sẽ được thêm vào vùng Column Labels.

Các trường số sẽ được thêm vào vùng Values.

Trong ví dụ này, ta muốn thống kê chi tiêu cả Quí 1 theo các khoản mục nên sẽ tích chọn trường “Khoản mục” và “Số tiền”:

Theo mặc định, các trường PivotTable được đặt trong khu vực Values sẽ được hiển thị dưới dạng Tổng (Sum).

Bạn có thể thay đổi tính toán mặc định bằng cách bấm vào mũi tên bên phải tên trường, rồi chọn Value Field Settings:

Hộp thoại Value Field Settings sẽ hiện ra, cho phép bạn:

Chọn loại tính toán bạn muốn dùng (Tổng, đếm, trung bình, lớn nhất, nhỏ nhất, tích,…) ở tab Summarize By:

Hiển thị giá trị dưới các dạng khác trong tab Show Values As:

Trong ví dụ này, ta chỉ cần giữ nguyên công thức theo mặc định, chỉnh lại bảng PivotTable cho đẹp (Đổi tên cột, thêm dấu phân cách hàng nghìn ở số liệu,…) là hoàn thành:

Bạn cũng có thể thêm trường “Tháng” vào bảng PivotTable tùy theo nhu cầu thống kê, chẳng hạn:

Cập nhật thông tin chi tiết về Toàn Bộ Kiến Thức Cơ Bản Về C++ – Nguyễn Công Trình Tổng Hợp trên website Hoisinhvienqnam.edu.vn. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Chúc bạn một ngày tốt lành!