
(P01)C++介绍
发布日期:2021-05-08 17:55:31
浏览次数:18
分类:精选文章
本文共 2193 字,大约阅读时间需要 7 分钟。
文章目录
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// for coutusing namespace std; // 引入命名空间int main(void){ int a = 10; int b =3; cout<<"hello world!"<
- (2)在Linux下
=========================================================================Makefile.PHONY:cleanCC=g++CPPFLAGS=-Wall -gBIN=mainOBJS=main.o add.o sub.o$(BIN):$(OBJS) $(CC) $(CPPFLAGS) $^ -o $@#将所有.cpp文件生成为.o文件#%.o:%.cpp $(CC) $(CPPFLAGS) -c $< -o $@clean: rm -f *.o $(BIN)=========================================================================
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月30日 06时23分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
entity framework core在独立类库下执行迁移操作
2021-05-09
Asp.Net Core 2.1+的视图缓存(响应缓存)
2021-05-09
【wp】HWS计划2021硬件安全冬令营线上选拔赛
2021-05-09
Ef+T4模板实现代码快速生成器
2021-05-09
JQuery选择器
2021-05-09
多线程之volatile关键字
2021-05-09
2.2.2原码补码移码的作用
2021-05-09
Java面试题:Servlet是线程安全的吗?
2021-05-09
Java集合总结系列2:Collection接口
2021-05-09
Linux学习总结(九)—— CentOS常用软件安装:中文输入法、Chrome
2021-05-09
比技术还重要的事
2021-05-09
linux线程调度策略
2021-05-09
软中断和实时性
2021-05-09
Linux探测工具BCC(可观测性)
2021-05-09
SNMP介绍及使用,超有用,建议收藏!
2021-05-09
HDU5589:Tree(莫队+01字典树)
2021-05-09
不停机替换线上代码? 你没听错,Arthas它能做到
2021-05-09
Python开发之序列化与反序列化:pickle、json模块使用详解
2021-05-09
采坑 - 字符串的 "" 与 pd.isnull()
2021-05-09
无序列表 - 链表
2021-05-09