跟我一起学C++之C++介绍(笔记)
来源:互联网 发布:万得for mac 编辑:程序博客网 时间:2024/05/21 09:05
C++介绍
为什么学习C++?
1.C++能提升性能,C++之父BjarneStroustrup戏称C++可以减轻全球变暖问题。
2.编程语言需求总结为四个:效率(efficiency)、灵活(flexible)、抽象(abstraction)、生产力(productvity)。C语言注重前两者,C++注重前三者,JAVA、.net这些都注重后两者
3.C++应用范围广,大部分桌面软件、游戏、服务器、搜索引擎
C++为什么难学?
1. C++支持的编程范式(paradigm)多
过程式(procedual):面向结构化的程序设计(任何程序都有三种形式构成:顺序、选择、循环)
数据抽象(data abstraction):等价于ADT,抽象数据类型指的是数据的取值范围,以及这些数据对应的操作集合,强调了数据和操作两点。就是对数据的逻辑结构抽象隐藏起来将操作暴露出来,体现的是封装。封装强调
基于对象(object-based):体现的是封装
面向对象式(object-oriented):程序=对象+对象+对象+对象间的消息传递。三个特征,封装、继承、多态。
函数式(functional):指的是一切皆函数,程序以函数为中心,摒弃了for循环,表现为函数的递归调用。
泛型形式:程序=对象+对象+对象+抽象行为(能够施加在不同类型而又大相径庭的对象之上),强调了一种通用的编程思想
模板元形式:模板元编程是给出代码的产生规则,编译器在编译期解释这些规则并生成新代码来实现我们预期的功能。模板元编程由于把运算由执行时提前到了编译时,所以其一个特点是运行时很快,效率很高!不过这是以编译耗时为代价的。另一方面是可以用来做那种神奇的类型推导
http://blog.csdn.net/myan/article/details/5928531
注意:数据抽象、基于对象和面向对象式里面都提到了封装,其中相互之间是有一些细微的差别的,数据抽象里面的封装强调的是值语义,基于对象和面向对象式强调的是对象语义。值语义指的是可以拷贝与赋值,对象语义不可以进行拷贝与赋值。
C++ 11值得学习的新特性
智能指针如shared_ptr、weak_ptr等
右值引用:rvalue reference;
摆脱面向对象的束缚:function/bind;
lambda expression and closure。
几本推荐的书籍
C++ primer 第四版(第五版中文版即将出来,会加入C++11的新特性)
Effective C++ 3rd
C++编码规范
敏捷软件开发——原则、模式与实践
代码大全,第二版
代码示例:
//add.h#ifndef _ADD_H_#define _ADD_H_int add(int a,int b);#endif
//sub.h#ifndef _SUB_H_#define _SUB_H_int sub(int a,int b);#endif
//add.cpp#include "add.h"int add(int a, int b){return a+b;}
//sub.cpp#include "sub.h"int sub(int a, int b){return a-b;}
//main.cpp#include <iostream>#include "add.h"#include "sub.h"using namespace std;//引入命名空间int main(void){int a = 10;int b = 3;cout<<"hello C++"<<endl;cout<<"a+b="<<add(a,b)<<endl;cout<<"a-b="<<sub(a,b)<<endl;return 0;}
编译器使用:启动调试F5,窗口一闪而过;启动运行不调试ctrl+F5可以保留住窗口。
linux下运行,Makefile文件:
.PHONY:cleanCC=g++CPPFLAGS=-wall -gBIN=mainOBJS=main.o add.o sub.o$(BIN):(OBJS)$(CC) $(CPPFLAGS) $^ -o $@%.o:%.cpp$(CC) $(CPPFLAGS) -c $< -o $@clean:rm -f *.o $(BIN)
- 跟我一起学C++之C++介绍(笔记)
- 《跟我一起学C++》
- 跟我一起学C++之从C到C++(bool类型)
- 跟我一起学C++之从C到C++(const限定符)
- 跟我一起学C++之从C到C++(const与#define)
- 跟我一起学C++之从C到C++(结构体内存对齐)
- 跟我一起学C++(第一季)
- 跟我一起学C语言
- 跟我一起学C语言(第二天)
- 跟我一起学C语言(第五天)
- 跟我一起学C语言(第七天)
- 跟我一起学C语言(第九天)
- 跟我一起学C++之name managling与extern “C”
- 跟我一起学C++之从C到C++引用
- 跟我一起学C++课程笔记(第一天)
- 跟我一起学C++课程笔记(第二天)
- 《跟我一起学makefile》学习笔记
- 《跟我一起学Makefile》笔记
- Struts2_文件上传_Demo
- hibernate tool
- 彻底理解Git
- mac下ctags illegal的问题
- 远程桌面连接支持网络级身份验证修复脚本 vbs
- 跟我一起学C++之C++介绍(笔记)
- 几道常问的题
- 欢迎使用CSDN-markdown编辑器
- Android 自定义组合控件
- 交换两个变量的值
- SDAU练习三1019
- 自定义折线图
- 任务和特权级保护(四)——《x86汇编语言:从实模式到保护模式》读书笔记35
- 杭电 OJ 1028 整数划分