【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
? ? ? ? c++是c语言的补充和扩展,本身的语法构成也是在一直迭代中。相信很多同学上大学读书的时候,或多或少对c语言有所了解,对它的变量、指针、函数也应该不陌生。既然大家都有c语言基础的话,那么在这方面稍微拓展一下的话,就可以学会c++了。当然c++本身的内容很多,很多方面还很琐碎,但我们学习的时候还是应该把精力放在那些经常使用到的语法上面。
? ? ? ? 封装,简单来看就是把数据和函数放在一起。之前c语言虽然也有封装,使用的关键字是struct。但是c++的封装有所不同,它是把变量和函数放在一起的,而c多是把数据放在一起。c++的封装一般像这样,
class parent
{
int data_;
public:
parent() {}
~parent() {}
parent(parent&) {}
void set_data(int data) { data_ = data; }
int get_data() { return data_; }
};
? ? ? ? 继承也是c++语言比较有意义的一个特征。它的意思是说,如果一个类能够继承父类,那么父类的变量和函数也可以顺势为子类所用。这一点在很多业务场景中其实真的非常实用。
class child :public parent
{
public:
child() {}
~child() {}
child(child&) {}
};
? ? ? ? 从上面这份代码看上去,好像child类里面什么也没有,但是正因为它继承了parent类的内容,所以parent类里面有什么,child也会有什么。
? ? ? ? 多态这个概念,从中文来说有点拗口。但是它本身想说明的其实就是,父类会提供一个通用接口,子类对于这个接口想怎么处理,那就是子类自己的事情。如果这么表达还是不清晰,我们换个说法。假设父类代表一个音乐文件的解析,那么子类则代表具体音乐格式的解析。比如mp3有mp3的解析方法,wma有wma的解析方法,但对于父类来说,它只有解析这么一个抽象接口。
? ? ? ? 这里我们还是用parent类和child类来说明。大家可以观察下,我们添加了一个virtual关键字的display函数,这个函数就是虚函数。每个子类都可以根据自己的需要灵活修改display函数,但是函数名和函数入参不会改变。
class parent
{
int data_;
public:
parent() {}
~parent() {}
parent(parent&) {}
void set_data(int data) { data_ = data; }
int get_data() { return data_; }
virtual void display() {}
};
class child :public parent
{
public:
child() {}
~child() {}
child(child&) {}
void display() {}
};
? ? ? ? 模板是我们另外一个经常遇到的特性。其实模板的本意,是想让程序员节省精力,避免重复编写代码的劳动。举例来说,对float数组的排序,和对double数组的排序,基本逻辑是一样的,唯一的不同仅仅是因为两者数据类型不同而已。语言设计者看到这个现象,并想出了用模板的方法来进行解决的思路。这种想法的初衷还是很好的,但是唯一让人开心不起来的,就是模板出错时,大片大片的debug log会让人觉得摸不着头脑。当前模板有函数模板和类模板两种,大家多用用就能学会的。
template <typename T>
class parent
{
T data_;
public:
parent() {}
~parent() {}
parent(parent&) {}
void set_data(T data) { data_ = data; }
T get_data() { return data_; }
virtual void display() {}
};
template<typename T>
class child :public parent<T>
{
public:
child() {}
~child() {}
child(child&) {}
void display() {}
};
template <typename T>
T find_bigger_data(T a, T b)
{
return a > b ? a : b;
}
? ? ? ? 除了上面说到的封装、继承、多态和模板之外,另外一个值得学习一下的c++内容,那就是STL库了。大家可以把它看成是通用数据结构加一点算法的小型库。这个库目前各个操作系统平台都支持,基本上是标配。对于这些标准库的使用,可以帮助我们解决不少问题、节省不少精力。
#include <vector>
void test_stl_vector()
{
int i;
std::vector<int> array;
for (i = 0; i < 10; i++)
{
array.push_back(i);
}
std::cout << array.size() << std::endl;
}
? ? ? ? 为了用好qt,我们肯定需要了解c++的一些基本知识点,特别是区别于c的知识点。但是大家在学习的时候,也没必要有很大的心理负担,本着用到什么学什么的思路去学,就可以了。当然,学习的过程中千万不要沉迷于语法细节、语法糖中去,毕竟把c++、把qt用起来才是第一位的。