跟我一起学C++之C++介绍(笔记)

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:clean
CC=g++
CPPFLAGS=-wall -g
BIN=main
OBJS=main.o add.o sub.o

$(BIN):(OBJS)
		$(CC) $(CPPFLAGS) $^ -o $@
%.o:%.cpp
		$(CC) $(CPPFLAGS) -c $< -o $@
clean:
		rm -f *.o $(BIN)


你可能感兴趣的:(C++笔记)