C++开发
2021-11-26 19:54:02 2 举报
AI智能生成
从C进阶到C++
作者其他创作
大纲/内容
01 从C到C++及类与对象
导入
为什么选择QT+C/C++开发
QT典型应用
汽车仪表盘
医用监护仪
物联网控制台
开发PC相关软件
语法升级
引用:void swp(int &a, int &b);
默认参数:void debug(const char *ptr= "------");
函数重载:int cmp(int data1, int data2);
int cmp(const char *str1, const char *str2);
int cmp(const char *str1, const char *str2);
堆内存:malloc(), free() -> new, delete
概念的升级
C程序写法升级史及显露出的问题
类与对象
类的声明
成员函数
构造函数
特征
类的初始化
创建类时自动调用
初始化表
this指针
分类
默认构造函数 A();
拷贝构造函数 A(const A &x); //深浅拷贝问题
赋值构造函数 operator=?;
析构函数
定义:~A();
类的解构
销毁类时自动调用
普通成员函数
常成员、常对象
常数据成员(构造函数初始化表赋值)
- class A{
- public:
- A():x(100){}
- const int x;
- }
常成员函数 void func() const;
常对象 const A a;
静态成员(属于类不属于对象)
静态成员的声明 static int x; static const int x = 10;
静态数据成员初始化 类外:static int A::x = 10;
静态成员函数
定义:static void func(); //能访问静态成员
调用方法:A::func();
友元(破环封装)
友元类 friend class B;
友元函数 friend void func();
友元成员函数friend void A::func();
思维的升级
运算符重载及组合与继承
运算符重载
概念
C++准许以运算符命名函数
- string a = "hello";
- a += "world"; //+(a, "world");
- cout<< "hello"; //<<(cout, "hello");
可以重载的运算符
实现形式
成员函数式(第一行形参是对象的引用)
友元函数式(左操作数不是本身,可交换型)
运算符分类
数学运算符
+ - * / ++ --
关系运算符
== <= >= !=
特殊运算符
[ ]
= 赋值运算符
() 仿函数
<< 输出运算符
标准输入输出流
基本类型自动匹配
int a;
char arr[] = "hello";
std::cout<<a<<arr<<std::endl;
char arr[] = "hello";
std::cout<<a<<arr<<std::endl;
输出格式控制
使用控制符控制输出格式
cout<<hex<<10<<endl;
使用流对象的成员函数控制输出格式
cout.unsetf(ios::dec);
cout.setf(ios::hex);
cout<<10<<endl;
cout.setf(ios::hex);
cout<<10<<endl;
组合
点
线
有粗细的线
继承(基类,派生类)
多态、异常、转换函数
多态
虚函数 virtual
纯虚函数、纯虚类
形式:virtual void func() = 0;
目的:统一接口、强制实现
虚析构函数(内存泄漏)
基类指针释放派生类对象
异常(try_datch)
字符串转数字
调用
try{ }catch(myexception &e){ }
自定义异常类
预定义异常类
转换函数
标准转换函数
reinterpret_cast
reinterpret_cast<new type>(expression)
将一个类型的指针转换成另一个类型的指针,它也允许从一个指针转换为整形类型
const_cast
const_cast<new type>(expression)
const指针与普通指针的相互转换,注意:不能将常量指针变量转换为普通变量
static_cast
static_cast<new type>(expression)
主要用于基本类型间的相互转换,和具有继承关系间的类型转换
dynamic_cast
dynamic_cast<new type>(expression)
只有类中含有虚函数才能用dynamic_cast;仅能在继承类对象间转换
dynamic_cast具有类型检查的功能,比static更安全
dynamic_cast具有类型检查的功能,比static更安全
自定义转换函数
成员转换函数
隐式转换(explicit)
模板及STL标准模板库
模板
类型模板
模板函数
//template <typename T>
template <class T>
T add<T &a, T &b>
{
return a+b;
}
template <class T>
T add<T &a, T &b>
{
return a+b;
}
模板类
template <class T>
class List{
public:
List();
~List();
private:
T arr;
int name;
};
class List{
public:
List();
~List();
private:
T arr;
int name;
};
非类型模板
template <class T, int SIZE>
class List{
public:
List();
~List();
private:
T arr[SIZE];
int num;
};
class List{
public:
List();
~List();
private:
T arr[SIZE];
int num;
};
模板特化
特化
template <>
class List{
public:
List();
~List();
private:
T arr[SIZE];
int num;
};
class List{
public:
List();
~List();
private:
T arr[SIZE];
int num;
};
偏特化
template <class A, class B>
class C{
A a;
B b;
};
template <class B>
class C<int, B>{
};
class C{
A a;
B b;
};
template <class B>
class C<int, B>{
};
STL
容器
顺序容器
vector(顺序表)
insert(); push_back(); erase(); empty(); begin(); end(); ...
list(链表)
insert(); push_bach(); erase(); pop_back(); empty(); front(); back(); sort(); ...
deque(双端队列)
insert(); push_back(); erase(); pop_back(); empty(); Push_front(); ...
关联容器
set //tree
set<int> a;
a.insert(1);
a.insert(3);
a.insert(5);
if(a.end != a.find(3))
cout<<"have3"<<endl;
if(a.end() != a.find(30))
cout<<"have30"<<endl;
a.insert(1);
a.insert(3);
a.insert(5);
if(a.end != a.find(3))
cout<<"have3"<<endl;
if(a.end() != a.find(30))
cout<<"have30"<<endl;
map()(键值对)
map<string, double> stu;
insert(make_pait<string, double>("john", 95.5));
stu["keiven"] = 80.0;
cout << "john :" << stu["john"] << endl;
cout << "keiven :" << str["kerven"] << endl;
insert(make_pait<string, double>("john", 95.5));
stu["keiven"] = 80.0;
cout << "john :" << stu["john"] << endl;
cout << "keiven :" << str["kerven"] << endl;
multimap
multiet
适配器
statck(栈)
push(); top(); pop();
queue
push(); front()/back(); pop();
proority_queue
迭代器
算法
sort(b, e)
sort(b, e, 回调函数)
unique(b, e); //使用该算法前,要先对元素进行排序
find_if(b, e, 谓词)
cout_if(b, e, 谓词)
for_each(b, e, 回调函数)
sort(b, e, 回调函数)
unique(b, e); //使用该算法前,要先对元素进行排序
find_if(b, e, 谓词)
cout_if(b, e, 谓词)
for_each(b, e, 回调函数)
0 条评论
下一页