Đề Xuất 2/2023 # Toàn Bộ Kiến Thức Cơ Bản Về C++ – Nguyễn Công Trình Tổng Hợp # Top 2 Like | Beiqthatgioi.com

Đề Xuất 2/2023 # Toàn Bộ Kiến Thức Cơ Bản Về C++ – Nguyễn Công Trình Tổng Hợp # Top 2 Like

Cập nhật nội dung 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 mới nhất trên website Beiqthatgioi.com. Hy vọng thông tin trong bài viết sẽ đáp ứng được nhu cầu ngoài mong đợi của bạn, chúng tôi sẽ làm việc thường xuyên để cập nhật nội dung mới nhằm giúp bạn nhận được thông tin nhanh chóng và chính xác 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

Công Thức Tính Tổng Hợp Nhập

Đấy, nếu chưa biết bài này, có khi bạn sẽ nghĩ như trên. Nhưng đọc xong bài này, bạn sẽ chỉ mất chưa đến 30s để gửi kết quả cho sếp. WTF? có thật không vậy?

Yêu cầu báo cáo tổng hợp nhập – xuất – tồn

Cách sử dụng hàm SUMIFS trong báo cáo NXT

Khi phân tích yêu cầu báo cáo, chúng ta sẽ thấy:

Từ phiên bản office 2007 trở lên, excel cung cấp cho chúng ta 1 công cụ rất mạnh trong việc tính toán dữ liệu với nhiều điều kiện, đó là hàm SUMIFS

Cấu trúc hàm này như sau:

=SUMIFS(sum_range,criteria_range1,criteria1,[criteria_range2,criteria2],…)

sum_range : Vùng tính tổng / Vùng chứa kết quả cần tính

criteria_range1 : Vùng chứa điều kiện thứ nhất

criteria1 : Điều kiện thứ 1 (nằm trong vùng điều kiện thứ 1)

criteria_rang2 : Vùng chứa điều kiện thứ hai (có thể có hoặc không)

criteria2 : Điều kiện thứ 2 (nằm trong vùng điều kiện thứ 2, có thể có hoặc không. Nếu có Criteria_range2 thì buộc phải có Criteria2)

Phân tích cách sử dụng hàm

Ta gọi tên các vùng trong bảng cần tính (A2:G22) như sau: (chức năng đặt tên: Formulas/Name Manager/Define Name – công việc này giúp cho việc phân tích công thức dễ hiểu hơn)

Ở đây có 1 khái niệm là “Kỳ”. Đây là thuật ngữ kế toán, có hàm ý chỉ 1 khoảng thời gian xác định, có điểm đầu kỳ và điểm cuối kỳ.

Đầu kỳ: Lớn hơn hoặc bằng Từ ngày (Ô J3 trong hình bên trên)

Cuối kỳ: Nhỏ hơn hoặc bằng Đến ngày (Ô J4 trong hình bên trên)

Trong kỳ: Khoảng thời gian từ J3 đến J4. Đây được gọi là 1 kỳ.

Tổng nhập trong kỳ

Lưu ý: Cùng là điều kiện ngày, nhưng có 2 nội dung nên phải tách ra thành 2 điều kiện. Không được ghép làm 1 sẽ không đúng

Tổng xuất trong kỳ

Tồn đầu kỳ

Tồn đầu kỳ được hiểu là: Tổng nhập cho tới trước kỳ này (trước thời điểm đầu kỳ) – Tổng xuất cho tới trước kỳ này (trước thời điểm đầu kỳ)

Tổng nhập đầu kỳ =SUMIFS(Cot_Nhap,Cot_MaHang,$C$33,Cot_Ngay,”<“&$C$31)

Tổng xuất đầu kỳ =SUMIFS(Cot_Xuat,Cot_MaHang,$C$33,Cot_Ngay,”<“&$C$32)

Tồn đầu kỳ = SUMIFS(Cot_Nhap,Cot_MaHang,$C$33,Cot_Ngay,”<“&$C$31)-SUMIFS(Cot_Xuat,Cot_MaHang,$C$33,Cot_Ngay,”<“&$C$31)

Tồn cuối kỳ

Tồn cuối kỳ được hiểu là: Tồn đầu kỳ + Tổng nhập trong kỳ – Tổng xuất trong kỳ

Ở đây ta đã tính được cụ thể cả 3 chỉ tiêu trên, do đó chỉ cần lấy các vị trí ô chứa kết quả thực hiện phép tính là được.

Sumifs là 1 công thức hay, mạnh mẽ, dễ sử dụng. Áp dụng được trong rất nhiều trường hợp. Thậm chí có thể thay thế hoàn toàn cho hàm sumif.

Lưu ý là SUMIFS chỉ dùng được trên phiên bản office 2007 trở lên.

Trong công việc quản lý kho, đôi khi hàm này còn được dùng thay thế cho hàm đếm (countif / countifs)

Hàm này thường xuyên sử dụng để tính tổng Nhập / Xuất / Tồn trong hầu hết các trường hợp.

Hàm tương đương: SUMPRODUCT. Nhưng so về tốc độ và cách sử dụng thì SUMIFS có nhiều lợi thế hơn.

Để có thể biết thêm nhiều hàm nâng cao trong Excel cũng như sử dụng tốt hơn các công cụ của Excel, các bạn hãy tham gia ngay khóa học EX101 – Excel từ cơ bản tới nâng cao của Học Excel Online. Đây là khóa học chi tiết và đầy đủ nhất, giúp bạn phát triển kiến thức một cách đầy đủ, có hệ thống. Đặc biệt khóa học này không giới hạn thời gian học tập, nên bạn có thể học thoải mái và xem lại bất cứ khi nào.

Tổng Quan Về Các Công Thức Trong Excel

Một tham chiếu nhận dạng một ô hoặc một phạm vi ô trên trang tính và cho Excel biết chỗ tìm giá trị hoặc dữ liệu mà bạn muốn dùng trong công thức. Bạn có thể dùng các tham chiếu để sử dụng các dữ liệu được bao gồm trong các phần khác của một trang tính trong một công thức hoặc sử dụng giá trị từ một ô trong một số công thức. Bạn cũng có thể tham chiếu đến ô trên các trang tính khác trong cùng một sổ làm việc và đến các sổ làm việc khác. Các tham chiếu đến ô trong các sổ làm việc khác được gọi là các nối kết hoặc tham chiếu ngoài.

Kiểu tham chiếu A1

Theo mặc định, Excel sẽ sử dụng kiểu tham chiếu A1, tham chiếu đến cột có chữ cái (từ A đến XFD, tổng cộng 16.384 cột) và tham chiếu đến hàng có số (từ 1 đến 1.048.576). Các chữ cái và số này được gọi là các đầu đề hàng và cột. Để tham chiếu đến một ô, nhập chữ cái của cột rồi đến số của hàng. Ví dụ: B2 tham chiếu đến ô giao cắt giữa cột B và hàng 2.

Để tham chiếu đến

Sử dụng

Thực hiện tham chiếu đến một ô hoặc một dải ô trên một trang tính khác trong cùng sổ làm việc

Trong ví dụ sau đây, hàm AVERAGE tính giá trị trung bình cho dải ô B1:B10 trên trang tính có tên Tiếp thị trong cùng sổ làm việc.

1. Tham chiếu trang tính có tên là Tiếp thị

2. Tham chiếu đến dải ô từ B1 đến B10

3. Dấu chấm than (!) Phân tách tham chiếu trang tính với tham chiếu dải ô

Lưu ý: Nếu trang tính được tham chiếu có chứa khoảng trắng hoặc số thì bạn cần phải thêm dấu nháy đơn (‘) trước và sau tên trang tính, chẳng hạn như =’123′!A1 hay =’Doanh thu Tháng 1’!A1.

Sự khác nhau giữa các tham chiếu tuyệt đối, tương đối và hỗn hợp

Tham chiếu tương đối Một tham chiếu ô tương đối trong công thức như A1, được dựa trên vị trí tương đối của ô chứa công thức và ô được tham chiếu đến. Nếu vị trí ô bao gồm các thay đổi công thức, tham chiếu được thay đổi. Nếu bạn sao chép hoặc điền công thức qua hàng ngang hoặc cột dọc, tham chiếu tự động điều chỉnh. Theo mặc định, các công thức mới sử dụng tham chiếu tương đối. Ví dụ, nếu bạn sao chép hoặc điền một tham chiếu tương đối trong ô B2 đến ô B3, nó sẽ tự động điều chỉnh từ =A1 sang =A2.

Công thức được sao chép với tham chiếu tương đối

Tham chiếu tuyệt đối Một tham chiếu ô tuyệt đối trong một công thức, như $A$1, luôn luôn tham chiếu đến một ô tại một vị trí cụ thể. Nếu vị trí ô bao gồm các thay đổi công thức, tham chiếu được thay đổi, tham chiếu tuyệt đối vẫn giữ nguyên. Nếu bạn sao chép hoặc điền công thức qua hàng ngang hoặc cột dọc, tham chiếu tuyệt đối sẽ không điều chỉnh. Theo mặc định, các công thức mới sử dụng các tham chiếu tương đối, vì vậy bạn có thể cần chuyển chúng sang các tham chiếu tuyệt đối. Ví dụ, nếu bạn sao chép hoặc điền một tham chiếu tuyệt đối trong ô B2 đến ô B3, nó sẽ giữ nguyên trong cả hai ô: =$A$1.

Công thức được sao chép với tham chiếu tuyệt đối

Tham chiếu hỗn hợp Một tham chiếu hỗn hợp có hoặc một cột tuyệt đối và hàng tương đối, hoặc hàng tuyệt đối và tương đối cột. Một tham chiếu cột tuyệt đối sẽ đưa vào biểu mẫu $A1, $B1, vân vân. Một tham chiếu tuyệt đối hàng sẽ đưa biểu mẫu $1, B$ 1 và như vậy. Nếu thay đổi vị trí của ô có chứa công thức, tham chiếu tương đối được thay đổi, và tham chiếu tuyệt đối không thay đổi. Nếu bạn sao chép hoặc điền công thức trong các hàng hoặc xuống cột, tham chiếu tương đối tự động điều chỉnh, và tham chiếu tuyệt đối không điều chỉnh. Ví dụ, nếu bạn sao chép hoặc điền một tham chiếu hỗn hợp từ các ô từ A2 tới B3, nó sẽ điều chỉnh từ = $1 để = B$ 1.

Công thức được sao chép với tham chiếu hỗn hợp

Kiểu tham chiếu 3-D

Tham chiếu thuận tiện nhiều trang tính Nếu bạn muốn phân tích dữ liệu trong cùng một ô hoặc phạm vi các ô trên nhiều trang tính trong một sổ làm việc, hãy dùng tham chiếu 3-D. Một tham chiếu 3-D bao gồm tham chiếu ô hoặc phạm vi, trước đó là một phạm vi tên trang tính. Excel sử dụng bất kỳ trang tính nào được lưu giữa tên mở đầu và kết thúc của một tham chiếu. Ví dụ, =SUM(Sheet2:Sheet13!B5) thêm tất cả các giá trị được bao gồm trong ô B5 trên tất cả các trang tính ở giữa và bao gồm Trang 2 và Trang 13.

Bạn có thể sử dụng các tham chiếu 3-D để tham chiếu đến các ô trên trang tính khác, để xác định tên và để tạo công thức bằng cách sử dụng các hàm sau đây: SUM, AVERAGE, AVERAGEA, COUNT, COUNTA, MAX, MAXA, MIN, MINA, PRODUCT, STDEV.P, STDEV.S, STDEVA, STDEVPA, VAR.P, VAR.S, VARA và VARPA.

Không thể dùng tham chiếu 3-D trong công thức mảng.

Không thể dùng tham chiếu 3-D với toán tử phần giao (một khoảng trắng) hoặc trong các công thức sử dụng giao cắt ngầm.

Điều gì xảy ra khi bạn di chuyển, sao chép, chèn, hoặc xóa trang tính Ví dụ sau giải thích những gì xảy ra khi bạn di chuyển, sao chép, chèn, hoặc xóa trang tính nằm trong một tham chiếu 3-D. Các ví dụ sử dụng công thức =SUM(Sheet2:Sheet6!A2:A5) để thêm các ô từ A2 đến A5 trên các trang tính từ 2 đến 6.

Chèn hoặc sao chép Nếu bạn chèn hoặc sao chép các trang tính từ Trang 2 đến Trang 6 (điểm kết thúc trong ví dụ này), Excel bao gồm tất cả giá trị trong ô A2 đến A5 từ các trang được thêm vào trong phần tính toán.

Xóa Nếu bạn xóa các trang tính nằm giữa Trang 2 và Trang 6, Excel sẽ loại bỏ các giá trị khỏi phép tính.

Di chuyển Nếu bạn di chuyển các trang từ giữa Trang 2 và Trang 6 đến một vị trí ngoài phạm vi trang tính được tham chiếu, Excel sẽ loại bỏ các giá trị của trang khỏi phép tính.

Di chuyển điểm cuối Nếu bạn di chuyển Trang 2 hoặc Trang 6 đến vị trí khác trong cùng sổ làm việc, Excel điều chỉnh tính toán cho phù hợp với một phạm vi trang tính mới giữa chúng.

Xóa điểm cuối Nếu bạn xóa Trang 2 hoặc Trang 6, Excel điều chỉnh tính toán để phù hợp với một phạm vi trang tính giữa chúng.

Kiểu tham chiếu R1C1

Bạn cũng có thể dùng một kiểu tham chiếu mà trong đó đánh số cả hàng và cột trên trang tính. Kiểu tham chiếu R1C1 có ích trong việc tính toán các vị trí hàng và cột trong macro. Trong kiểu R1C1, Excel chỉ ra vị trí của một ô với một “R” theo sau là số của hàng và một “C” theo sau là số của cột.

Khi bạn ghi một macro, Excel ghi một số lệnh bằng cách sử dụng kiểu tham chiếu R1C1. Ví dụ, nếu bạn ghi một lệnh, như bấm nút AutoSum để chèn một công thức thêm một phạm vi ô, Excel ghi công thức bằng cách dùng kiểu tham chiếu R1C1, không phải kiểu A1.

Bạn có thể bật hay tắt tham chiếu R1C1 bằng cách thiết đặt hoặc xóa hộp kiểm Kiểu tham chiếu R1C1 dưới phần Làm việc với công thức trong hộp thoại Công thức, thể loại Tùy chọn. Để hiển thị hộp thoại này, hãy bấm tab Tệp.

Đầu Trang

Tổng Hợp Các Công Thức Chế Tạo Trong Minecraft

Có hai nơi mà người chơi có thể tiến hành chế tạo đồ trong Minecraft:

– Khu vực chế tạo 2×2 ô trong túi đồ

Khi bạn mới bắt đầu chơi Minecraft, bạn sẽ có một khu chế tạo 2×2, dùng để chế tạo các đồ vật đơn giản. Mở khu vực này bằng cách nhấn phím E ( trên bản PC) hoặc nhấn phím ba chấm ở bên phải của Hotbar ( trên bản Mobile).

Khu vực 2×2 này rất tiện lợi khi mới bắt đầu, nhưng dần dần bạn sẽ thấy nó không đủ lớn để có thể chế tạo các vật phẩm phức tạp hơn như công cụ, vũ khí và áo giáp. Do đó bạn cần phải nâng cấp lên bàn chế tạo đồ 3×3.

– Bàn chế tạo đồ 3×3 ô

Để mở được khu vực này, bạn cần một bàn chế tạo đồ. Kích vào vào Bàn chế tạo đồ chuột phải để mở khu vực 3×3 này. Vì vậy thông thường bạn hãy đưa nó ra Hotbar để có thể kích vào nó bắt cứ lúc nào.

Nếu bạn chưa có Bàn chế tạo đồ, bạn có thể tạo ra nó bằng 2 cách sau:

Cách 1: Mở khu vực chế tạo đồ 2×2. Sử dụng bất kì 4 miếng gỗ của bất kì loại gỗ nào như gỗ sồi, vân sam, bạch dương,…

Lưu ý: phải đặt các miếng gỗ theo chính xác như hình ảnh dưới, khi đó hình bên phải sẽ hiển thị ra Bàn chế tạo đồ. Bạn nhớ kéo Bàn chế tạo đồ vào túi của mình.

Cách 2: Nếu bạn đang sử dụng Cheat code, bạn có thể gõ câu lệnh sau:

/give @p crafting_table 1

/give @p crafting_table 1 0

Sau khi mở Bàn chế tạo, dựa vào các công thức chế tạo, bạn di chuyển các thành phần từ Túi đồ bằng cách kéo thả vào khung lưới.

Lưu ý: nguyên tắc quan trọng khi tạo vật phẩm, đó là phải sắp xếp các thành phần vào đúng vị trí trên lưới. Nếu đúng công thức, vật phẩm bạn muốn tạo sẽ hiển thị ở ô bên phải.

Bạn đang đọc nội dung 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 trên website Beiqthatgioi.com. Hy vọng một phần nào đó những thông tin mà chúng tôi đã cung cấp là rất hữu ích với bạn. Nếu nội dung bài viết 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. Chúc bạn một ngày tốt lành!