Lập trình hướng đối tượngBài 12: Tổng kết LTHĐT với C++... Nội dung• Lập trình hướng đối tượng • C++ và các đặc điểm • Một số thư viện • Visual studio... Lập trình hướng đối tượngXây dựn
Trang 1Lập trình hướng đối tượng
Bài 12: Tổng kết LTHĐT với C++
Trang 2Nội dung
• Lập trình hướng đối tượng
• C++ và các đặc điểm
• Một số thư viện
• Visual studio
Trang 3Lập trình hướng đối tượng
Xây dựng chương trình bằng cách xây
dựng các đối tượng và thiết lập sự cộng
tác của chúng.
Trang 4Các nguyên tắc cơ bản
• Trừu tượng hóa
– Nguyên tắc chế ngự sự phức tạp
– Tập trung vào các yếu tố chính, bỏ qua các yếu tố
không liên quan
• Đóng gói
– Ẩn giấu chi tiết thể hiện
– Đóng gói dữ liệu và hành vi cùng nhau
• Phân cấp
– Xây dựng các đối tượng mới bằng cách tham
chiếu hoặc mở rộng các đối tượng khác
Trang 5Các khái niệm chính
• Lớp
• Đối tượng
• Giao diện
• Thừa kế
• Đa hình
Class: Order
orderNum AS INT custNum AS INT CalculateTotalPrice( )
PUBLIC:
CreateOrder( ) UpdateOrder( ) GetOrderTotal( ) Next( )
Interface: IList
PUBLIC:
Next( )
Trang 6C++ và các đặc điểm
Thiết lập, hủy bỏ, thiết lập copy, gán,
viết chồng toán tử, khuôn hình
Trang 7• Ngôn ngữ
• Thư viện
• String
• Regular Expression
• I/O Stream
• Smart Pointer
• Exception
• Mathematical Utilities
• Time Utilities
• Random Number
• Initializer List
• Pair và Tuple
• Function Object
• Multithreading
• Type Trait
• Standard Template
Library
– STL Containers – STL Algorithms http://en.cppreference.com/w/
Trang 8C++ các đặc điểm cơ bản
• Lớp, đối tượng, thừa kế, đa hình, viết chồng toán tử
• Thuộc tính truy cập: private, protected, public
• Phương thức ảo, thuần ảo
• Lớp trừu tượng
• Đơn thừa kế, đa thừa kế
• Phương thức thiết lập, phương thức hủy bỏ
• Thiết lập copy, move
• Gán và gán move
• Dữ liệu, phương thức tĩnh
• Khuôn hình hàm, khuôn hình lớp
Trang 9Move constructor
#include <cstring>
#include <algorithm>
string( const char * p){
data = new char [size];
memcpy(data, p, size);
}
~string(){
}
string( const string& that){
data = new char [size];
memcpy(data, that.data, size);
}
string a(x); // Line 1
string b(x + y); // Line 2
string c(some_function_returning_a
_string()); // Line 3
string(string&& that) // string&&
is an rvalue reference to a string
{ data = that.data;
that.data = nullptr ; }
Trang 10Một số đặc điểm mới trong C++ 11
• Biểu thức Lambda (hàm vô danh)
[capture](parameters)->return-type {body}
int main()
{
char s[]="Hello World!";
int Uppercase = 0; //modified by the lambda
for_each(s, s+sizeof(s), [&Uppercase] (char c) {
if (isupper(c))
Uppercase++;
});
cout<< Uppercase<<" uppercase letters in: "<< s<<endl;
}
Các kiểu capture [], [=],[&],
[=,&a],[this]
Trang 11• Từ khóa auto và decltype
auto x=0; //x has type int because 0 is int
auto c='a'; //char
auto d=0.5; //double
auto national_debt=14400000000000LL;//long long
void func(const vector<int> &vi){
vector<int>::const_iterator ci=vi.begin();
}
auto ci=vi.begin();
const vector<int> vi;
typedef decltype (vi.begin()) CIT;
CIT another_const_iterator;
Trang 12// C++11 container initializer
vector<string> vs={ "first", "second", "third"};
map singers =
• Cú pháp khởi tạo đồng nhất
std::string s("hello");
int m=int(); //default initialization
std::string s="hello";
int x=5;
int arr[4]={0,1,2,3};
struct tm today={0};
struct S {
int x;
S(): x(0) {} }
class C{
int a;
int b;
public:
C(int i, int j);
};
C c {0,0}; //C++11 only Equivalent to: C c(0,0); int* a = new int[3] { 1, 2, 0 }; /C++11 only
class X { int a[4];
public:
X() : a{1,2,3,4} {} //C++11, member array init };
class C{
int a=7; //C++11 only
Trang 13• Hàm default và delete
struct A {
A()=default; //C++11
virtual ~A()=default; //C++11
};
int func()=delete;
• Con trỏ nullptr
void f(int); //#1
void f(char *);//#2
//C++03
f(0); //which f is called?
//C++11
f(nullptr) //unambiguous, calls #2
const char *pc=str.c_str(); //data pointers
if (pc!=nullptr) cout<<pc<<endl;
int (A::*pmf)()=nullptr; //pointer to member function
void (*pmf)()=nullptr; //pointer to function
Trang 14Một số thư viện
Boost, CGAL, QT, SOCI, EIGEN
Trang 15Thư viện lớn, hỗ trợ nhiều khía cạnh lập trình C++ Phiên bản hiện tại: 1.59.0
http://boost.org
Thư viện các cấu trúc và thuật toán hình học Phiên bản hiện tại: 4.7
http://cgal.org
http://soci.sourceforge.net/
Khung ứng dụng c++ đa nền tảng Phiên bản hiện tại: 5.5.0
http://qt.io
Thư viện truy cập cơ sở dữ liệu Phiên bản hiện tại: 3.2
Trang 16Visual studio
Môi trường phát triển ứng dụng
Trang 17Cấu hình, kiến trúc
• Cấu hình Debug hay Release
• Kiến trúc x86 hay x64
Trang 18Compile và link