C++ cơ bản: khác gì C và những thứ giúp code dễ hơn

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

C++ ra đời như phần mở rộng của C, bổ sung lập trình hướng đối tượng và rất nhiều tiện ích. Nó vẫn nhanh và sát phần cứng như C, nhưng viết thoải mái hơn nhờ thư viện chuẩn. C++ được dùng nhiều trong game engine, phần mềm hiệu năng cao và lập trình thi đấu.

Chương trình C++ đầu tiên

#include <iostream>

int main() {
    std::cout << "Xin chao C++!" << std::endl;
    return 0;
}

std::cout in ra màn hình, << đẩy dữ liệu vào luồng, std::endl xuống dòng. Tiền tố std:: chỉ ra các thứ thuộc thư viện chuẩn. Biên dịch bằng g++ hello.cpp -o hello.

Nhập xuất đơn giản hơn

Không còn phải nhớ định dạng %d, %f như printf của C; C++ tự nhận kiểu:

#include <iostream>
#include <string>

int main() {
    std::string ten;
    int tuoi;
    std::cout << "Nhap ten: ";
    std::getline(std::cin, ten);
    std::cout << "Nhap tuoi: ";
    std::cin >> tuoi;
    std::cout << ten << " " << tuoi << " tuoi" << std::endl;
    return 0;
}

std::string thay cho mảng char

Kiểu std::string tự quản lý bộ nhớ, hỗ trợ nối bằng +, so sánh bằng ==, lấy độ dài bằng .size(). Bạn không còn lo ký tự kết thúc '\0' hay tràn bộ đệm như với chuỗi kiểu C.

std::vector thay cho mảng cố định

vector là mảng động, tự giãn khi thêm phần tử:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> so = {5, 2, 8};
    so.push_back(1);
    std::sort(so.begin(), so.end());
    for (int x : so) {
        std::cout << x << " ";    // 1 2 5 8
    }
    std::cout << "\n";
    return 0;
}

Vòng lặp for (int x : so) (range-based for) và hàm std::sort cho thấy sức mạnh của thư viện chuẩn STL (Standard Template Library), gồm cả map, set, stack, queue được cài đặt sẵn và tối ưu.

Tham chiếu (reference)

C++ có tham chiếu, một bí danh của biến, giúp truyền tham số mà không cần cú pháp con trỏ phức tạp:

void tang(int &x) {
    x++;
}

int main() {
    int a = 5;
    tang(a);          // a trở thành 6
    return 0;
}

Lớp và đối tượng

#include <iostream>
#include <string>

class SinhVien {
public:
    SinhVien(std::string ten, double diem) : ten(ten), diem(diem) {}
    void in() const {
        std::cout << ten << ": " << diem << "\n";
    }
private:
    std::string ten;
    double diem;
};

int main() {
    SinhVien sv("An", 8.5);
    sv.in();
    return 0;
}

Từ khóa public, private kiểm soát quyền truy cập, thể hiện nguyên tắc đóng gói.

Tóm tắt khác biệt chính so với C

MụcCC++
Lập trình hướng đối tượngKhôngCó (class, kế thừa, đa hình)
ChuỗiMảng charstd::string
Mảng độngmalloc, tự quản lýstd::vector
Thư viện cấu trúc dữ liệuGần như không cóSTL phong phú
Nhập xuấtprintf, scanfcin, cout

Lưu ý khi học

  • C++ rộng và có nhiều tính năng; hãy học theo hướng "C++ hiện đại", ưu tiên vector, string và con trỏ thông minh thay vì tự dùng malloc, new.
  • Thông báo lỗi của trình biên dịch đôi khi dài khó đọc; hãy đọc dòng báo lỗi đầu tiên trước.
  • Nếu mục tiêu là làm game bằng engine C++ hoặc lập trình thi đấu, đây là ngôn ngữ rất đáng đầu tư.

Con trỏ thông minh và RAII

Một lý do C++ hiện đại dễ sống hơn C là nó tự dọn bộ nhớ nhờ nguyên tắc RAII: tài nguyên gắn với vòng đời của đối tượng, ra khỏi phạm vi thì tự giải phóng. Công cụ chính là con trỏ thông minh:

#include <iostream>
#include <memory>

struct Quai {
    int mau;
    Quai(int m) : mau(m) {}
    ~Quai() { std::cout << "Quai bi huy
"; }
};

int main() {
    {
        auto q = std::make_unique<Quai>(100);
        std::cout << "Mau: " << q->mau << "
";
    }   // ra khỏi khối, q tự giải phóng
    std::cout << "Da ra khoi khoi lenh
";
    return 0;
}

std::unique_ptr sở hữu duy nhất một đối tượng và tự xóa nó khi hết phạm vi, nên bạn gần như không cần new/delete trực tiếp. std::shared_ptr cho phép nhiều chủ sở hữu và xóa khi chủ cuối cùng rời đi. Chuỗi std::string và std::vector cũng tuân theo nguyên tắc này, nên chúng an toàn hơn mảng thô của C.

Quy tắc thực dụng cho người mới: ưu tiên đối tượng cục bộ và container chuẩn, dùng con trỏ thông minh khi cần cấp phát động, và chỉ tự quản lý bộ nhớ khi thực sự có lý do.

Kết luận

C++ giữ tốc độ của C nhưng đem lại nhiều công cụ giúp code gọn và an toàn hơn. Hãy bắt đầu với cin, cout, string, vector rồi mới đi tới lớp và STL nâng cao.

Học xong lý thuyết, hãy thực hành thật nhiều; các bài giảng có bài tập trong khóa học codebem.com sẽ giúp bạn việc đó.

author_photo
Nguyễn Đình Cường

0 comment