C++ Chương I:Bài Tập Căn Bản

[quote=“NotFound, post:12, topic:613”]
up google tìm kiếm namespace std be understood ro your à!
[/quote] ok tks you mình sẽ tìm xem

NAMESPACE LÀ GÌ???
Chắc các bạn đã quá quen với thuật ngữ namespace, vì gần như trong bất cứ chương trình C++ nào các bạn cũng dùng đến câu lệnh “using namespace std;”. Vậy namespace là gì, và tại sao lại có câu lệnh trên trong hầu hết các chương trình của chúng ta?
Namespace (tạm dịch là không gian tên) là một cơ chế trong C++ cho phép chúng ta phân nhóm các thực thể như class, object, function thành những nhóm riêng biệt, mỗi nhóm đó được đặt cho một cái tên, gọi là không gian tên (namespace).
Ví dụ mình có namespace N, trong đó mình định nghĩa class C, object o và function f. Khi đó, mình có thể tham chiếu đến các thực thể này bằng cách viết N::C, N::o hay N::f. Điều này giúp cho chúng ta có thể phân biệt được các thực thể cùng tên nằm trong các namespace khác nhau. Chẳng hạn trong namespace N1 có class C, trong namespace N2 cũng có class C, khi đó ta có thể thể hiện rõ ra được là chúng ta đang ám chỉ đến class nào bằng cách viết tường minh N1::C hay N2::C.
Mỗi namespace có thể chứa trong đó một hay một số namespace khác, giống như một package có thể chứa các package khác trong ngôn ngữ Java. Điều này cho phép chúng ta định nghĩa ra những cấu trúc namespace phức tạp theo kiểu cây, và khi đó, khi cần tham chiếu đến một thực thể nào đó, ta sẽ viết theo kiểu: vehicles::cars::toyota::corolla::altis_2012 chẳng hạn.
Trong ngôn ngữ C++, người ta định nghĩa ra một số lượng lớn class, object, function mà lập trình viên hay dùng đến, và đặt chúng trong một namespace có tên là ‘std’ (viết tắt của standard). Một trong những thực thể quen thuộc nhất trong namespace std chính là đối tượng “cout”. Đối tượng này cho phép chúng ta hiển thị dữ liệu ra màn hình console (standard output) bằng toán tử <<. Ví dụ ta in dòng chữ “Hello World” ra màn hình bằng câu lệnh “std::cout << “Hello World”;”.
Mỗi khi phải tham chiếu đến một object, chúng ta cần chỉ rõ nó thuộc namespace nào để tránh nhầm lẫn. Tuy nhiên, C++ cho phép lập trình viên có một tiện ích đó là chỉ ra namespace mặc định mà người đó sẽ dùng trong phạm vi file .cpp mà người đó đang thao tác. Để làm điều đó, lập trình viên cần khai báo câu lệnh “using namespace abc;” ở ngay đầu file, trong đó ‘abc’ là tên của namespace anh ta muốn trở thành namespace mặc định. Chẳng hạn câu khai báo quen thuộc “using namespace std” sẽ cho phép chúng ta đặt namespace std làm mặc định và khi tham chiếu đến các thực thể trong đó thì không cần có tiền tố std:: ở phía trước nữa. Và vì vậy, câu lệnh in dòng chữ ra màn hình của chúng ta trở thành “cout << “Hello World”;”
Hãy viết, biên dịch và chạy thử hai chương trình sau xem kết quả có giống nhau không nhé:

//-------------- Program A --------------------------
#include <iostream>
int main () {
std::cout << "Hello World";
return 0;
}
//------------------------------------------------------
//--------------- Program B -------------------------
#include <iostream>
using namespace std;
int main () {
cout << "Hello World";
return 0;
}
//------------------------------------------------------

Chúc các bạn có những giây phút thú vị với ngôn ngữ lập trình C++.
Hãy share bài viết nếu bạn cảm thấy nó có ích nhé! Cảm ơn các bạn rất nhiều!
Nguồn: https://www.facebook.com/vietnamesecplusplus/posts/142447385937332

[quote=“NotFound, post:12, topic:613”]
lên google search namespace std là hiểu rỏ bạn à!
[/quote] Chuẩn đấy. Theo mình thì nên google trước nhé :smiley:

5 Likes

có thể mình chưa hiểu rõ về C++ học không chắc rồi. mình chỉ biết mấy cái cơ bản nhất thôi ạ :frowning:

3 Likes

Mình cũng như bạn. Cũng mới bắt đầu tìm hiểu về C++ đây. Cùng cố gắng nhé :smiley:

2 Likes

mình học chẳng chắc một ngôn ngữ nào cả toàn bị lỗi phần con trỏ với mảng thôi :frowning: còn C++ mình học tới class là ngộp không biết học ntn cả ( tự học ) bạn học tới đâu rồi giúp mình với

1 Like
  • [quote=“chauminh, post:17, topic:613”]
    mình học chẳng chắc một ngôn ngữ nào cả
    [/quote] Theo mình thì không nên học nhiều ngôn ngữ lập trình nếu mới học. Tự học thì nên học chắc chắn một ngôn ngữ (C hoặc C++) đã. Chưa bò thì chạy sao nổi.
  • Phần con trỏ thì nên xem Video của bạn Đạt: từ bài 19 tới bài 21 rồi đọc bài Tìm hiểu về bản chất của con trỏ trên diễn đàn c việt xem có hiểu hơn không nhé. bản thân mình thấy hiểu được kha khá về con trỏ rồi :smiley:.
  • Phần mảng thì xem bài 23bài 24 và các bài tiếp theo nữa. Chắc có lẽ sẽ hiểu thêm nhiều đó.
  • Còn về phần giúp đỡ thì mình không dám vì mình cũng mới bắt đầu học như bạn thôi. Chia sẻ thì được :smiley: >> Giúp đỡ thì nhờ các đại ca trên Dậy Nhau Học Ciếm Cơm là được mà.
1 Like

@chauminh Những bạn mới học lập trình nên bắt đầu từ bài học đầu tiên phần C (ý kiến của riêng mình): Mục lục các bài học và bài viết hay

Sau mỗi bài học cần làm đi làm lại các bài tập liên quan đến bài học đó, cho đến khi nhuần nhuyễn rồi hẵng chuyển qua bài học kế tiếp. Học lập trình cần có thời gian, không thể một sớm một chiều được.

Để tìm bài tập và ví dụ hãy sử dụng Google và cần học thêm tiếng Anh cơ bản. Ví dụ: http://lmgtfy.com/?q=printf+in+c+example

3 Likes

ok tks you :smile: mình cố gắng ha :stuck_out_tongue:

1 Like

Chính xác rồi @NotFound, thời gian đầu việc viết std::cout có thể hơi phiền hà vài dài dòng. Nhưng nhanh thôi, mình sẽ thấy được cái lợi của nó

  • Mình sẽ định hình rõ, hàm nào, thuộc namspace nào (ít ra cũng hiểu rõ hơi khái niệm namespace)
  • Tránh bị gọi nhầm hàm, cái này rất đau đầu khi debug
  • Code dễ đọc hơn, vì mình phân tách rõ, mình đang sử dụng namespace std hay namespace xxx

Cái này là kinh nghiệm của Đạt thôi, các bạn thấy mình sai thì nhắc mình nhé.

4 Likes

Cần những bài tập có lời giải như thế này :blush:

2 Likes

Mình cũng mới làm quen :smiley: Cùng chia sẻ nhé :slight_smile:

1 Like

vậy là Tiến phải viết

using std::cout;
hay là 
std::cout;

Tại Tiến cũng mới học C++ nên cần mọi người giúp đở :smiley:

1 Like

Đây là một ví dụ cách sử dụng namespace…

Nên viết như sau

int swap(int x, y)
{
    std::cout << "I'm too lazy to do swap, do it yourself" << std::endl();
}
int main()
{
    std::cout << "hello, world!" << std::endl();
    int x = 1;
    int y = 2; 
    std::swap(x,y); // gọi hàm swap trong thư viện std
    swap(x,y); // gọi hàm swap mình định nghĩa ở trên
}

Không nên viết

using namespace std;
int swap(int x, y)
{
    cout << "I'm too lazy to do swap, do it yourself" << endl();
}
int main()
{
    cout << "hello, world!" << endl();
    int x = 1;
    int y = 2; 
    swap(x,y); // Hàm swap nào đang được gọi đây?
}
2 Likes

Bạn đọc kỹ các bài post trên sẽ thấy mà. Người ta viết std::cout << "Hello World"; Using là khi mình muốn khai báo có sử dụng namesppace đó. Tuy nhiên, cách viết này không được khuyến khích lắm, vì sau này sẽ có trường hợp có bạn khai báo using 2 namespace, mà 2 namespace đó có trùng 1 hay nhiều tên hàm mà bạn sử dụng thì trường trình sẽ báo lỗi vì nó không biết bạn dùng hàm của namesapce nào. Trừ khi bạn chỉ đích danh namespace. Ví dụ:

    Using namespace A; //Giả sử namspace A có hàm FunctionXYZ();
    Using namespace B; //Giả sử namspace A có hàm FunctionXYZ();
    
    int main()
    {
    FunctionXYZ()//Báo lỗi ở đây vì nó k biết bạn gọi hàm FunctionXYZ() của namespace nào.Nên ta sẽ fai viết lại
    A::FunctionXYZ();
    }
3 Likes

Cần phân biệt giống như post trên mình có nói.
Đầu tiên là sử dụng theo kiểu trực tiếp: using namespace std;

using namespace std;
int main() {
   cout << "Hello World" << endl();
}

Thứ hai là định nghĩa trước khi sử dụng: using std::cout;

int main() {
   using std::cout;
   cout << "Hello World" << endl();
}

Thứ ba là viết đầy đủ: std::cout

int main() {
   std::cout << "Hello World" << std::endl();
}

Cách thứ 1 không nên.
Cách thứ 2 ổn.
Cách thứ 3 ổn nhất.

2 Likes

Cách thứ 2 viết code sẻ ngắn hơn! Nhưng không biết có lỗi gì không? Mình thì đang code theo cách thứ 3!

Cách thứ 2 nói chung cũng tàm tạm, vì nó được khai báo trong 1 block of code nhỏ. Tức là giữa hai dấu {..}. Tuy nhiên, nó cũng làm cho mình không thấy rõ là cout thuộc về std nếu {..} chứa quá nhiều code. Ví dụ dài hơn một màn hình đi, khi bạn cuộn xuống phần tiếp theo, thì sẽ không thấy khai báo std::cout.

P/S: Đạt chưa bao giờ dùng cách 2, thấy nó sao sao đó :smiley:

1 Like

Mới học chắc học cách 3 cho an toàn! sau này có exp rồi tính tiếp! Hihi

1 Like

@NotFound Một sai sót lớn của người mới học C++ là sử dụng using namespace std; vô tội vạ. Mà chính xác ra là sai sót của người dạy. Nhưng cũng không trách được, vì phải nói rất kỹ thì người mới học mới nắm được cái này.

Sử dụng std::out thay cho using namespace std; nói chung là có lợi cho việc đọc code. Không có ảnh hưởng nào đến tốc độ thực thi chương trình cả. Tuy nhiên Đạt nghĩ cũng nên tập thói quen code sao cho dễ đọc.

Khi mới học, mình chú trọng sao cho code chạy được. Nhưng khi đi làm, phải làm sao đảm bảo code dễ đọc. Chứ sau này chuyển giao dự án cho người khác, người ta đọc code họ khinh cho :smile:

1 Like

Tiến thì học nhiều ngôn ngữ khi đi học! C thì có học sơ sơ! vào được fpt sofware HCM mà bỏ về giờ thành một người thất nghiệp không biết gì hết! não lòng :slight_smile:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?