C++学习(一)
一、C++语言语法基础(6)
1.从C到C++的过渡(1)
2.类和对象(2)剑
3.操作符重载(1)
4.继承与多态(1)
5.异常和I/O流(1)
二、数据结构和算法(3)
1.基本数据结构,堆栈、队列、链表、二叉树,实现和应用(2)
2.排序和查找算法(1)
三、模板和STL(3)
1.模板语法(1)
2.STL(2)
四、阶段项目(2)
简化的企业管理信息系统(MIS)
第一课 从C到C++的过渡
一、背景介绍
算盘 - 面向硬件的编程
电子计算机 - 机器语言的编程1010
- 汇编语言的编程ADD
- 高级语言的编程Fortran
printf ("%d", 12);
- 结构化程序设计C/PASCL
顺序、分支、循环、函数
- 面向对象的程序设计C++/Java/C#
- 面向问题的程序设计
1960 - Algol 60,算法语言,远离硬件,不适合进行系统开发
1963 - 桥大学,CPL,在Algol 60的基础上增加对系统开发的支持,复杂,不易掌握,不易使用
1970 - MIT,BCPL,CPL的精华版,易学易用,太慢,不实用
1972 - Ken Thomposon,B语言,通过运行时支持优化BCPL的性能,缺少类型
1973 - Dennis Ritchie,C语言,用C重新实现UNIX内核
1978 - 《The C Programming Language》,第一个C语言的事实标准
1989 - ANSI C,C89
1990 - ISO C, C90
1999 - ISO C 修订,C99
197X - Bajarne Stroustrup,simula早期的面向对象语言,性能低下,B语言。
1979 - 贝尔实验室,多核UNIX系统仿真,Cpre,通过扩展宏为C语言增加类似simula的面向对象机制。C with Class:
simula - 类
Alogo 68 - 操作符重载
Ada - 模板、名字空间
Smalltalk - 引用、异常
C是C++的子集,C++是对C的扩展。
1983 - C++命名
1985 - CFront 1.0,第一款商用C++编译器
1987 - GNU C++
1990 - Borland C++
1992 - Microsoft C++,IBM C++
1998 - ISO C++98
2003 - ISO C++03
2011 - ISO C++2011/C++11/C++0x
二、C++语言的使用领域:
1.游戏开发:强建模能力,性能高。
2.科学计算:FORTRAN,C++算法库。
3.网络和分布式:ACE框架。
4.桌面应用:VC/MFC,Office,QQ,多媒体
5.操作系统和设备驱动:优化编译器的发明使C++在底层开发方面可以和C向媲美。
6.移动终端
既需要性能,同时又要有面向对象的建模。
三、C++比C更丰富
1.支持面向对象,将问题域和方法域统一化。宏观面向对象,微观面向过程。
2.支持泛型编程。
int add (int a, int b) { ... }
template<typename T>
T add (T a, T b) { ... }
3.支持异常机制。
int func (void) {
...
}
int main (void) {
if (func () == -1) {
错误处理;
}
}
4.操作符重载
四、第一个C++程序
1.编译器:g++,如果用gcc需要带上-lstdc++,指定其使用标准c++的运行库。
2.源文件扩展名:.cpp/.cc/.C/.cxx/.c++,最好用.cpp
3.头文件:#include <iostream>
大多数标准库头文件都没有.h后缀。
4.输出:cout - 标准输出对象
输入:cin - 标准输入对象
插入运算符:<<
提取运算符:>>
5.std:所有标准库的函数、对象、类型都位于std名字空间中。
五、名字空间
1.对程序中的标识符(类型、函数、变量)按照某种逻辑规则划分成若干组。
2.定义名字空间
namespace 名字空间名 {
名字空间成员;
}
3.使用名字空间
1)作用于限定符:名字空间名::名字空间成员,表示访问特定名字空间中的特定成员。
2)名字空间指令:
using namespace 名字空间名;
在该条指令之后的代码对指令所指名字空间中的所有成员都可见,可直接访问这些成员,无需加“::”。
3)名字空间声明:
using 名字空间名::名字空间成员;
将指定名字空间中的某个成员引入当前作用域,可直接访问这些成员,无需加“::”。
4.匿名名字空间
如果一个标识符没有被显示地定义在任何名字空间中,编译器会将其缺省地置于匿名名字空间中。对匿名名字空间中的成员通过“::名字空间成员”的形式访问。
5.名字空间合并
6.名字空间嵌套
namespace ns1 {
namespace ns2 {
namespace ns3 {
void foo (void) { ... }
}
}
}
ns1::ns2::ns3::foo ();
using namespace ns1::ns2::ns3;
foo ();
六、C++中的结构、联合和枚举
1.结构
1)定义结构型变量时,可以省略struct关键字。
2)结构内部可以定义函数——成员函数。
3)sizeof (空结构) -> 1
2.联合
增加了匿名联合的概念。借用联合语法形式,描述一些变量在内存中的布局方式。
3.枚举
枚举是一个独立的数据类型。
C:
enum E {a, b, c};
enum E e;
e = a;
e = 1000;
C++:
enum E {a, b, c};
E e;
e = a;
e = b;
e = c;
e = 1000; // ERROR !
e = 1; // ERROR !
七、C++的布尔类型
bool b = true;
b = false;
cout << sizeof (b) << endl; // 1
b = 100;
b = 1.234;
b = "hello";
b = 'A';
八、C++中的运算符别名
&& - and
|| - or
& - bitand
^ - xor
{ - <%
} - %>
[ - <:
] - :>
九、C++中的函数
1.重载:在同一个作用域中,函数名相同,参数表不同的函数,构成重载关系。
C++编译器会对程序中的函数做换名,将参数表中的类型信息汇合到函数名中,以保证函数名的唯一。
通过extern "C",可以要求编译器不做C++换名,以方便在C语言的模块中使用C++编译生成的代码。
2.缺省参数和哑元参数
1)如果调用一个函数时,没有提供实参,那么对应形参就去缺省值。
2)如果一个参数带有缺省值,那么它后边的所有参数必须都带有缺省值。
3)如果一个函数声明和定义分开,那么缺省参数只能放在声明中。
4)避免和重载发生歧义。
5)只有类型而没有名字的形参,谓之哑元。
i++ - operator++
++i
V1: void decode (int arg) { ... }
V2: void decode (int) { ... }
C++学习(一)的更多相关文章
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Unity3d学习 制作地形
这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- 菜鸟Python学习笔记第一天:关于一些函数库的使用
2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
随机推荐
- hunnu---11547 你的组合数学学得如何?
解析:比较简单的DP,从左向右一个一个连续着放,dp[X][Y]表示到第X个硬币的时候Y状态的方案数,Y=0表示x左边那个不是正面的,Y=1表示x左边那个是正面 如果左边不是正面,那么当前放正面的就把 ...
- 使用页面对象模型(pageFactory)
页面对象模型可以使测试脚本有更高癿可维护性,减少了重复癿代码,把页面抽象出来. 页面对象设计模式提供了测试一个接口,测试可以像用户行为一样来操作页面. 通过隐藏页面元素定位,返有劣将测试代码和页面分离 ...
- 2015年10月22日CSS学习笔记
XHTML1.0对HTML4.0的改进 借鉴了XML的写法,语法更加严格. 把页面的内容和样式分离了,废弃了html4中的表示样式的标签和属性.推荐使用css来描述页面的样式. CSS样式的优先级 ! ...
- HW机试字符串压缩java(1)
package huawei; public class StringZip { public static String stringZip(String a) { String ans =&quo ...
- Clean Code – Chapter 5 Formatting
The Purpose of Formatting Code formatting is about communication, and communication is the professio ...
- linux内核系列(二)内核数据结构之链表
双向链表 传统链表与linu内核链表的区别图: 图一 图二 从上图中看出在传统链表中各种不同链表间没有通用性,因为各个数据域不同,而在linux内核中巧妙将链表结构内嵌到数据域结构中使得不同结构之间能 ...
- HW4.5
public class Solution { public static void main(String[] args) { final double POUNDS_PER_KILOGRAM = ...
- HDU2196 - Computer(树形DP)
题目大意 给定一颗n个结点的树,编号为1~n,要求你求出每个结点能到达的最长路径 题解 用动态规划解决的~~~~把1 当成树根,这样就转换成有根树了.我们可以发现,对于每个结点的最长路,要么是从子树得 ...
- Codeforces335B - Palindrome(区间DP)
题目大意 给定一个长度不超过5*10^4的只包含小写字母的字符串,要求你求它的回文子序列,如果存在长度为100的回文子序列,那么只要输出长度为一百的回文子序列即可,否则输出它的最长回文子序列 题解 这 ...
- C#定义类成员
1.成员定义 public--成员可以由任何代码访问. private--成员只能由类中的代码访问(如果没有使用任何关键字,就默认使用这个关键字). internal--成员只能由定义它的程序集(项目 ...