文章目录
- 1.需要掌握的重要练习
- 2.为什么要学习C++
- 3.C++为什么难学
- 4.C++ 11值得学习的新特性
- 5.几本推荐学习C++的书
- 6.开发工具选择
- 7.eg
1.需要掌握的重要练习
- 大整数类
- 字符串类:掌握运算符重载,内存管理与拷贝
- vector实现:熟悉模板编程
- 面向对象版的表达式计算器
- 面向泛型版的表达式计算器:可以扩充为编译器
- 俄罗斯方块的实现
2.为什么要学习C++
- C++能提升性能。提升性能意味着钱。C++之父Bjarne Stroustrup戏称C++可以减轻全球变暖问题
- 编程语言的需求总结为四个:效率(efficiency),灵活(flexibility),抽象(abstraction),生产力(productivity)。
C语言注重前两者,C++注重前三者,JAVA、.net这些注重后两者。
3.C++为什么难学
- C++支持的编程范式(paradigm)
(1)过程式(procedual):顺序,选择,循环
(2)数据抽象(data abstraction):值语义,ADT,封装
(3)基于对象(object-based):对象语义, 利用function/bind的代替面向对象(以对象语义为主)
(4)面向对象式(object-oriented):对象语义,封装,继承,多态(与值语义为主)
(5)函数式(functional):LISP,Erlang,用递归代替for,C++11的lambda表达式和闭包支持函数式编程
(6)泛型形式:
与面向对象的区别:
面向对象程序=对象+对象+消息传递(外部对象不能施加在内部对象)
面向泛型程序=对象+对象+抽象行为(能施加在不同类型而又大相径庭的对象之上)
(7)模板元形式:基于模板的编程范式,是泛型编程的升华。
模板元编程是给出代码的产生规则,编译器在编译期解释这些规则并生成新代码来实现我们预期的功能。
模板元编程由于把运算由执行时提前到了编译时,所以其一个特点是运行时很快,效率很高!不过这是以编译耗时为代价的。另一方面是可以用来做那种神奇的类型推导 - 值语义与对象语义
值语义可以拷贝与赋值、对象语义不可进行拷贝与赋值
4.C++ 11值得学习的新特性
- 智能指针如shared_ptr、weak_ptr等
- rvalue reference;右值引用
- function/bind;摆脱面向对象的束缚
- lambda expression and closure(闭包).函数式编程
5.几本推荐学习C++的书
- C++ primer 第四版(第五版中文版即将出来,会加入C++ 11的新特性)
- Effective C++ 3rd
- C++编码规范
- 敏捷软件开发——原则、模式与实践
- 代码大全,第二版
6.开发工具选择
- 目前最主流的编译有两个GNU g++与和微软Visual C++
windows和linux都能运行! - windows使用的是vs2010进程开发调试,Linux使用ubuntu进行开发调式
7.eg
- (1)在windows下
=========================================================================
add.h
#ifndef _ADD_H_
#define _ADD_H_
int add(int a, int b);
#endif // _ADD_H_
=========================================================================
sub.h
#ifndef _SUB_H_
#define _SUB_H_
int sub(int a, int b);
#endif // _SUB_H_
=========================================================================
add.c
#include "add.h"
int add(int a, int b)
{
return a + b;
}
=========================================================================
main.c
'#include "add.h"
#include "sub.h"
#include <iostream> // for cout
using namespace std; // 引入命名空间
int main(void)
{
int a = 10;
int b =3;
cout<<"hello world!"<<endl;
cout<<"a+b="<<add(a, b)<<endl;
cout<<"a-b="<<sub(a, b)<<endl;
return 0;
}
=========================================================================
sub.cpp
#include "sub.h"
int sub(int a, int b)
{
return a - b;
}
- (2)在Linux下
=========================================================================
Makefile
.PHONY:clean
CC=g++
CPPFLAGS=-Wall -g
BIN=main
OBJS=main.o add.o sub.o
$(BIN):$(OBJS)
$(CC) $(CPPFLAGS) $^ -o $@
#将所有.cpp文件生成为.o文件#
%.o:%.cpp
$(CC) $(CPPFLAGS) -c $< -o $@
clean:
rm -f *.o $(BIN)
=========================================================================