这一节应该算是第一节,刚写了个目录和参考书,刚开始涉及到知识点,本人是从C转的,有点C的基础,所以C++学习就基于C的基础语法已经了解的情况下去总结,C的基础类型和一些简单的关键字就省略了,写到哪算哪吧。
- C++特点:原文引用Effective C++条款01中的一些表达,将C++视为一个由相关语言组成的集合,是一种多重泛型编程语言,一个同时支持面向过程,面向对象,面向函数,面向泛型,面向元编程形式的一种语言集合:包括C、C++、template C++、STL四种语言。
- C:区块(block)、语句(statements)、预处理器(preprocessor)、内置数据类型、数组、指针等;
- C++:类(class)、封装(encapsulation)、继承(inheritance)、多态(polymorphism)、重载(virtual)等;
- Template C++:泛型编程,这部分我用的不是很多,C++11新特性会总结一些;
- STL:是在Template C++基础上发展而来的一个程序库,它是对容器(container)、迭代器(iterator)、算法(algorithm)以及函数对象的封装;
- 三大特性:封装、继承、多态。
- 关键字
- const
- const变量
const int val = 0; val = 2;//报错
- cosnt引用
int val = 0; //1 const int &p = val //或者int &const p = val p = 2; //错误 val = 2; //正确 p = 2 //2 int &p = 1; //错误 const int &p = 1; //正确
- const指针
int val = 0; //1 const int *p = &val;//或者int const *p = val; *p = 2; //错误 p++; //正确 val = 2; //正确 //2 int *const p = &val; *p = 2; //正确 p++; //错误
- const返回值,只有当返回值为变量的指针或引用时const才生效;
const int val = 0; //1.const 无效 const int func_v() { //do something... return 0; } //2.const 有效 const int* func_p() { //do something... return &val; } //3.const 有效 const int & func_r() { //do something... return val; } int main() { int val_v = func_v(); val_v = 1; //正确 int* val_p = func_p(); //错误 int& val_r = func_r(); //错误 return 0; }
注:不要返回局部变量的指针或者引用,当局部变量离开作用域后,局部变量会被释放,返回局部变量的指针会引起未定义的行为,导致程序错误。
- const类成员函数,不能修改类成员变量的值
#include <iostream> using namespace std; class A { public: A():val(0){} void func() const { //do something... cout << val << endl; val = 1; // 错误 } private: int val; }; int main() { A a; a.func(); return 0; }
注:每个类成员函数都会获取到指向当前对象的 A* this指针,通过指针可以访问类中的成员变量,但是const类成员函数A::func()中的类成员函数指针为const A* this,所以不能对类成员变量进行修改。
- const变量
- const