Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 12

Form đặt câu hỏi về nội dung học và project

https://forms.office.com/r/XmGXjsraRB

Các câu trả lời mang tính chất THAM KHẢO, nên tìm hiểu thêm các nguồn tài liệu khác.
Q Làm sao để thuần thục cấu trúc rẽ nhánh?
Đọc lý thuyết (slide) --> Làm ví dụ --> Code your own example -> Read/Code again/more

Q : Sự khác nhau giữa char[] và string

A : char[] và string là hai cách để biểu diễn chuỗi ký tự trong C++ nhưng có những sự khác nhau
quan trọng:

1. Kiểu dữ liệu:
 char[]: Là một mảng các ký tự, được kết thúc bằng ký tự null ( '\0'). Còn được gọi
là một chuỗi ký tự (C-style string).
 string: Là một lớp trong thư viện chuẩn C++ ( <string>) biểu diễn một chuỗi ký tự.
2. Thư viện và Tiện ích:
 char[]: Được xử lý như một mảng, và nhiều hàm xử lý chuỗi của thư viện C
(<cstring>) được sử dụng để thao tác trên nó.
 string: Được xử lý như một đối tượng và có nhiều phương thức (hàm thành viên)
trong thư viện chuẩn C++ (<string>) giúp thao tác và quản lý chuỗi một cách dễ
dàng hơn.
3. Kích thước động:
 char[]: Có kích thước cố định được xác định khi khai báo và không thay đổi được.
 string: Có thể thay đổi kích thước linh hoạt theo nhu cầu.
4. Gán và Sao chép:
 char[]: Gán chuỗi ký tự vào một mảng ký tự bằng cách sao chép từng ký tự hoặc
sử dụng các hàm như strcpy.
 string: Có thể gán trực tiếp từ một chuỗi ký tự hoặc từ một char[] bằng cách sử
dụng các phương thức như assign, =,...
5. Phương thức xử lý chuỗi:
 char[]: Sử dụng các hàm trong thư viện C như strlen, strcpy, strcat,...
 string: Sử dụng các phương thức như length(), append() , substr(),...

Q : Sự khác nhau giữa hàm mẫu và chồng hàm

Hàm mẫu (template function) và chồng hàm (function overloading) là hai khái niệm quan trọng
trong lập trình C++ để xử lý nhiều loại đối số khác nhau. Dưới đây là sự khác nhau giữa chúng:

Hàm Mẫu (Template Function):


1. Định nghĩa:
 Hàm mẫu cho phép bạn viết một hàm mà có thể hoạt động với nhiều kiểu dữ liệu khác
nhau mà không cần viết nhiều phiên bản của hàm.
 Được xác định bằng từ khóa template trước khi định nghĩa hàm.
2. Sử dụng:
 Khi bạn muốn thực hiện một hàm hoạt động với nhiều kiểu dữ liệu mà không cần phải
viết lại nhiều lần.
Ví dụ

template <typename T>

T add(T a, T b) {

return a + b;

Chồng Hàm (Function Overloading):


1. Định nghĩa:
 Chồng hàm cho phép bạn định nghĩa nhiều phiên bản của hàm cùng tên nhưng với số
lượng và kiểu tham số khác nhau.
2. Sử dụng:
 Khi bạn muốn cung cấp nhiều cách để gọi một hàm với các tham số khác nhau.
3. Ví dụ:
int add(int a, int b) {

return a + b;

}
float add(float a, float b) {

return a + b;

Sự Khác Nhau:
1. Kiểu Tham Số:
 Hàm mẫu sử dụng kiểu tham số generic ( typename hoặc class) cho tất cả các kiểu dữ
liệu.
 Chồng hàm sử dụng kiểu tham số khác nhau hoặc số lượng tham số khác nhau.
2. Độ Linh Hoạt:
 Hàm mẫu cung cấp độ linh hoạt cao vì nó có thể hoạt động với nhiều kiểu dữ liệu khác
nhau.
 Chồng hàm cung cấp độ linh hoạt với cách gọi hàm và kiểu tham số.
3. Tính Tương Thích:
 Hàm mẫu thường được ưu tiên khi kiểu tham số được suy luận từ đối số.
 Chồng hàm được ưu tiên dựa trên kiểu tham số đã được chuyển vào.
4. Hiệu Suất:
 Hàm mẫu có thể tạo ra mã máy lớn hơn do việc tạo ra nhiều phiên bản của hàm cho mỗi
kiểu dữ liệu.
 Chồng hàm có thể dẫn đến mã máy hiệu quả hơn vì chỉ có một phiên bản của hàm được
thực thi tại thời điểm biên dịch.

Chọn giữa hàm mẫu và chồng hàm thường phụ thuộc vào yêu cầu cụ thể của vấn đề và sự thuận
tiện trong quản lý mã nguồn.

Q Khi bắt đầu lập trình C++ khi đã biết lập trình C nên lưu ý điều gì

Xem câu hỏi sau

Q Sự khác nhau giữa C và C++


https://www.mygreatlearning.com/blog/difference-between-c-and-c/#:~:text=from%20C
%20language%3F-,C%20is%20a%20structural%20or%20procedural%20programming
%20language%20that%20was,%2C%20Inheritance%2C%20Polymorphism%2C%20etc.

Difference Between C and C++


Parameter C C++
C++ is a structural as well as an
C is a structural or procedural
Programming Paradigm object-oriented programming
programming language.
language.
History C was developed by scientist C was developed by Bjarne
Dennis Ritchie in 1972 at Bell Stroustup in 1979.
Laboratories.
C follows the bottom-up
Approach C follows a top-down approach
approach.
Keywords C contains 32 keywords C++ contains 63 keywords.
C++ support both built-in and
Data Types C supports built-in data types.
user-defined data types.
.c is the file extension for C .cpp is the file extension for C++
File Extension
programming language programming language
<stdio.h> header file is used by <iostream.h> header file is used
Header File
C language by C++ language
In C language, we use calloc() In C++ language, we use a new
Allocation and Deallocation of and malloc() for dynamic operator for the allocation of
Memory allocation of memory and free() memory and a delete operator
for deallocation of memory. for the deallocation of memory.
C language does not support
Access Modifier C++ support access modifier
access modifier
C does not have any security C++ is a secure language as it
Security features so it can be offers security features such as
manipulated by outsider data hiding and encapsulation
C does not support reference
Reference Variable C++ support reference variable
variable
C don’t supports function C++ supports function
Function Overloading and
overloading and function overloading and function
Function Overriding
overriding overriding
C does not support exception
C++ directly support exception
handling directly, it uses the
Exception Handling handling with the help of try –
function that support exception
catch block
handling
C is a procedural language, so
C++ is a object oriented
code written in C are divided in
Program Division language, so code and divided
separate blocks known as
into classes and objects
function
C doesn’t support inline
Inline Function C++ support inline function
function
C is known as function driven C is known as object driven
Driven Type
language language
Code written in C++ language
Code written in C language can
can be run on C compiler as C++
Compatibility be run on C++ compiler as C is
language includes OOP’s
the foundational language
concept
In C, the data and function are In C++, the data and function
Data and Function separated as it is a procedural are encapsulated as it is a object
programming language oriented programming language
In C scanf() and printf() In C++ cin and cout functions
Input and Output Function functions are used to take the are used to take the input and
input and output respectively output respectively
C++ language is more suitable
C language is more suitable for
for high level implementation
low level implementation such
Application Development such as game development,
as network driver, text editor,
smartwatches, embedded
assembler, etc
systems, etc
To prevent the collision and
organize the code, namespace is
Namespace C++ support the namespace
needed but C does not support
that
MySQL, Windows Kernel, Oracle
Google Chrome, Torque 3-D
Used By Database, Telegram messenger,
game, Microsoft Office, etc
etc
Similarity Between C and C++
 Both C and C++ follows similar code structure
 They both have the similar compilation
 They also follow similar coding syntax
 C++ have extended grammar but the basic grammar is same as C
 Their memory model is very close to the hardware
 The both languages have the similar notation of stack, heap and file scope variable.
 Mostly all C operators and keywords are present in C++ as well.

Q : Liệu có cách nào học về C++ mà dễ hiểu hơn là mỗi đọc không ạ (vấn đề CHUNG cho
nhiều môn học)

Cách học lập trình (ví dụ)


1. Xác định mục tiêu : học để làm gì?
2. Học như thế nào : đọc (slide, chú ý các ví dụ) à code à test + debug à tham khảo các
nguồn tài liệu khác (youtube, …rất dễ hiểu); trao đổi với các bạn qua các kênh của lớp à làm
project cá nhân/nhóm (áp dụng vào thực hành)

Q : Sự khác nhau giữa lớp (class) và đối tượng (object, instance)


Xem lại định nghĩa và ví dụ trong slide S08, 09
Có thể lấy ví dụ so sánh :
class như kiểu dữ liệu (int ...) + các hàm thao tác trên dữ liệu đó (gán giá trị, ...)
đối tượng giống như một biến có kiểu được quy định trong class; và có các thao tác (hàm) tác
động đến đối tượng đó quy định trong class
VD : khai báo lớp Person có các thành phần dữ liệu như họ tên, CCCD, ngày sinh; có các hàm
thành viên nhập thông tin, đọc thông tin; hiển thị thông tin
Các đối tượng là person 1, 2.. thuộc lớp Class
Link code ví dụ: https://onlinegdb.com/CLaXJ3cat
Q : Khái niệm đóng gói (encapsulation) và mức độ che dấu (private, public, protected)

Đóng gói (encapsulation) là một nguyên tắc quan trọng trong lập trình hướng đối
tượng, nơi các thành phần của một đối tượng (thường là các biến thành viên-thuộc tính
và các phương thức-hàm) được "gói" lại với nhau và có thể chỉ được truy cập thông qua
một giao diện công cộng (hàm). Điều này giúp bảo vệ trạng thái (thuộc tính) của đối
tượng.

Trong C++, từ khóa private, public, và protected được sử dụng để xác định phạm vi truy
cập của các thành phần trong một lớp. Các thành phần private chỉ có thể được truy cập
từ bên trong lớp đó, trong khi các thành phần public có thể được truy cập từ bên ngoài.
Các thành phần protected giữ cho chúng có thể được truy cập từ bên trong lớp và từ các
lớp kế thừa.

Ví dụ :

https://onlinegdb.com/EkQ5RkHcc

Trong ví dụ trên, name, age, và GPA được đặt là private, chỉ có thể truy cập thông qua các
phương thức công cộng getName(), getAge(), getGPA(), setName(), setAge(), setGPA(), và
display(). Như vậy, trạng thái nội tại (thuộc tính) của đối tượng Student được bảo vệ và chỉ
có thể được thay đổi thông qua các phương thức (hàm) công cộng. Điều này đảm bảo
tính đóng gói và giữ cho trạng thái nội tại được ẩn.
https://onlinegdb.com/jQm8OIh03
Trong ví dụ trên, thay đổi các mức độ đóng gói để thấy được tác dụng.
Q Sự khác nhau giữa class và struct? Cách sử dụng “tối ưu"?
A:
In C++, a structure works the same way as a class, except for just two small differences. The
most important of them is hiding implementation details. A structure will by default not
hide its implementation details from whoever uses it in code, while a class by default hides
all its implementation details and will therefore by default prevent the programmer from
accessing them. The following table summarizes all of the fundamental differences.
Class Structure

1. Members of a class are private by 1. Members of a structure are public by


default. default.

2. An instance of a class is called an 2. An instance of structure is called the


‘object’. ‘structure variable’.

3. Member classes/structures of a class are


private by default but not all programming 3. Member classes/structures of a
languages have this default behavior eg structure are public by default.
Java etc.

4. It is declared using the class keyword. 4. It is declared using the struct keyword.

5. It is normally used for data abstraction 5. It is normally used for the grouping of
and further inheritance. data

6. NULL values are possible in Class. 6. NULL values are not possible.

7. Syntax: 7. Syntax:
class class_name{ struct structure_name{
data_member; type structure_member1;
member_function; type structure_member2;
}; };

Some examples that elaborate on these differences:


https://www.geeksforgeeks.org/structure-vs-class-in-cpp/

Q: Why have to use destructor function in C++?


In C++, a destructor is a special member function that is called automatically when an object
goes out of scope or is explicitly deleted. Its primary purpose is to clean up resources that the
object acquired during its lifetime. Here are some key reasons why destructors are important:
 Resource Deallocation:
 Destructors are used to release resources that an object might have acquired during its
lifetime. This can include freeing memory, closing files, releasing network connections,
or any other resource management.
 Memory Cleanup:
 If an object has allocated memory dynamically using new (e.g., in a constructor), the
destructor is responsible for releasing that memory using delete. This prevents memory
leaks and ensures that resources are properly managed.
 File or Resource Closure:
 If an object is responsible for managing external resources like files, network
connections, or database connections, the destructor can be used to close or release those
resources, preventing resource leaks.
 Custom Cleanup Logic:
 Destructors allow you to define custom cleanup logic based on the specific needs of your
class. For example, you might want to log a message, update a database, or perform some
other action before an object is destroyed.
 Orderly Cleanup in Object Hierarchies:
 In object-oriented programming, when you have class hierarchies with inheritance, the
destructor of a base class is called before the destructor of a derived class. This ensures
an orderly cleanup process from the most derived class to the base class.
 Automatic Cleanup with RAII (Resource Acquisition Is Initialization):
 Destructors are a fundamental part of the RAII principle, which promotes the idea that
resource management should be tied to object lifetimes. When an object is created, it
acquires resources, and when it goes out of scope, the destructor is automatically called to
release those resources.
Here's a simple example to illustrate the use of a destructor:
https://onlinegdb.com/xA4l7mDet
Project (bài tập lớn)
Q: Project nên làm bằng C hay C++
Nên làm bằng C++ và lập trình theo hướng đối tượng. Xem câu hỏi tiếp theo
Q: Sự khác nhau giữa lập trình hướng chức năng, lập trình thủ tục, lập trình hướng đối
tượng?

Lập trình hướng thủ tục:


1. Tập trung vào chức năng:
 Ví dụ: Một chương trình quản lý danh bạ có thể có các chức năng như thêm liên
hệ, xóa liên hệ và hiển thị danh sách liên hệ.
2. Dữ liệu và hàm tách biệt:
 Ví dụ: Các biến và hàm được tách biệt. Các hàm thực hiện các thao tác trên dữ
liệu được truyền vào chúng.
3. Thiết kế dựa trên luồng xử lý:
 Ví dụ: Sử dụng các câu lệnh tuần tự để thực hiện các bước cụ thể, giống như thủ
tục trong một quy trình.
4. Không có kế thừa:
 Ví dụ: Mỗi chức năng thường độc lập và không thừa kế các tính năng từ chức
năng khác.
Lập trình hướng đối tượng:
5. Tập trung vào đối tượng:
 Ví dụ: Một chương trình quản lý danh bạ có thể có các đối tượng như Liên hệ,
Nhóm liên hệ, và các phương thức như thêm liên hệ vào nhóm.
6. Dữ liệu và hàm kết hợp:
 Ví dụ: Dữ liệu và các phương thức xử lý dữ liệu đều được đóng gói trong các đối
tượng.
7. Thiết kế dựa trên các lớp và đối tượng:
 Ví dụ: Sử dụng các lớp để mô tả các đối tượng và quan hệ giữa chúng, và các
phương thức để thực hiện các thao tác liên quan đến đối tượng.
8. Kế thừa:
 Ví dụ: Lớp có thể kế thừa tính năng từ lớp khác, giúp tái sử dụng mã và tăng tính
linh hoạt.
Ví dụ :

Quản lý sinh viên bằng hai cách khác nhau: một sử dụng hướng thủ tục và một sử dụng
hướng đối tượng, với hai lớp là Person và Student.
https://onlinegdb.com/GzxdpyQBt

https://onlinegdb.com/wmT0Cgc-2

9. Tái sử dụng mã:


 Hướng thủ tục: Các hàm displayPerson và displayStudent không sử dụng lại mã nguồn.
 Hướng đối tượng: Sử dụng lại hàm display từ lớp Person trong lớp con Student.
10. Kế thừa:
 Hướng thủ tục: Không có khái niệm kế thừa.
 Hướng đối tượng: Student kế thừa các thành phần của Person, giúp tái sử dụng mã
và mô hình hóa mối quan hệ.
11. Đóng gói:
 Hướng thủ tục: Dữ liệu được truyền trực tiếp qua tham số hàm.
 Hướng đối tượng: Dữ liệu được đóng gói trong các đối tượng, giúp ẩn thông tin
chi tiết và tạo ra giao diện công cộng.
12. Tính linh hoạt:
 Hướng thủ tục: Thường cần thêm thay đổi trong hàm nếu cần mở rộng chương
trình.
 Hướng đối tượng: Dễ mở rộng với việc thêm các lớp mới hoặc kế thừa từ lớp
hiện có mà không ảnh hưởng đến các phần khác của chương trình.

Q Đề tài quản lý sinh viên muốn lưu phần dữ liệu mà mỗi lần compile và run là một lần
nhập lại ,cách khắc phục ?
C1 Lưu và đọc dữ liệu từ file
C2 : tạo sẵn các giá trị trong chương trình.
C3...

Q Bài tập lớn của nhóm em đã hoàn tất thì những tuần tiếp theo bọn em cần phải làm gì ạ?
- Cần làm rõ hoàn tất là như thế nào?
- Báo cáo bài tập lớn bao gồm
1 Slide
2 Report (word + readme)
3 Các tài liệu liên quan : code, hướng dẫn cài đặt, sử dụng chương trình
4 Update các thông tin về project lên web
(Xem thêm trong phần chú ý về báo cáo QT và CK)

Q Thưa thầy, mình có cần phải đáp ứng được hết những tiêu chí trong mục tiêu đề ra
không ạ?
Khi giải quyết một vấn đề, quan trọng là mục tiêu đề ra. Nên yêu cầu tối thiểu là hoàn thành các
mục tiêu đã đề ra.
Chú ý : mục tiêu có thể điều chỉnh cho hợp lý và thống nhất trong nhóm trong quá trình làm
Q Có phải điền hết các biểu đồ của UML không ạ

Tập trung vào các sơ đồ


- Chức năng
- Ca sử dụng (use case)
- Hoạt động
- Lớp
- Tuần tự
Tham khảo
https://users.soict.hust.edu.vn/trungtt/uploads/slides/OOP_Bai13(vi).pdf
https://www.microsoft.com/vi-vn/microsoft-365/business-insights-ideas/resources/guide-
to-uml-diagramming-and-database-modeling

Q Việc bảo mật trong chương trình QLSV có cần thiết ?


Nhìn chung bảo mật là cần thiết cho hầu hiết các phần mềm, nhưng hiện giờ chỉ/có thể
implement/demo các giải pháp bảo mật đơn giản trong nội dung/phạm vi project như check
usernam và password; kiểm tra quyền...

Q Có cần trình bày các yêu cầu phi chức năng?


Các yêu cầu phi chức năng thường chưa cần thiết lắm hoặc khó đánh giá. Chỉ cần nêu ngắn gọn

Q Project nên làm bằng C hay C++. Làm bằng ngôn ngữ khác vd như Python được không ạ
Mặc định yêu cầu làm bằng C++. Có thể phát triển bằng ngôn ngữ khác nếu muốn học thêm ngôn
ngữ đó và so sánh với C++

Q Khi làm đề tài quản lí, làm thế nào để nhập dữ liệu vào rồi khi kết thúc chương trình vẫn
không bị mất đi?

Tạo các giá trị mặc định trong chương trình hoặc lưu/đọc kết quả/dữ liệu vào/từ file

You might also like