<2014 04 15> C++语言回顾精要(原创By Andrew)
C++语言回顾精要
《Visual C++程序设计》张岳新,这本书是很多学校的本科生C++教学用书,今天重新拿来翻了一遍。跟很多国人写的技术书籍一样,写书并不是为了让初学者看懂入门,而是为已经掌握了该知识的人罗列一遍。
这本书分为两部分:Visual C++基础&面向对象的程序设计。可以说前半本第一部分就是C语言,因为C++是C的一个超集,其对C的延伸表现为实现面向对象的一些机理和特性。用本书的话来说,就是“封装性、继承与派生性、重载与多态”。
第一部分,非OO编程
它对C语言的扩展仅仅体现在以下几个方面:
1、关键字++: (new/delete 动态内存分配成为语言本身的特性 ---》 calloc + 构造与析构函数调用 的一个封装)
(OO:class this friend virtual operator /private protected public/ )
(asm catch template throw try 汇编&异常机制)
2、C++的I/O流类库:cin>> cout<< (不属于语言,但太常用,C语言用print函数库)
3、作用域部分:变量可以在块内定义(C不可以),以及相关的一些变量作用域的规则
4、函数重载:可以定义多个同名函数(C不可以),根据形参个数或类型来实现函数重载
5、引用:可以通过&name1 = name来定义引用类型变量,实现函数调用时“自然的”按地址传递变量(C不可以,只能用指针)
-----------------------------------------------------------------------------------------
第二部分:OO编程特性/方法
C也是可以实现OO编程的,这只是一种观念和方法论,主要的手段是结构体(结构体中的的数据+函数指针等于封装了类)(ooc programming http://ooc-coding.sourceforge.net/)。但是C++在语言本身专门对OO思想进行了设计和延伸。
1、C++中,结构体与类的<唯一不同>是成员权限默认不同(类 private 结构体 public)。隐含指针this、构造函数与析构函数。friend友元函数,可以定义之用来在类外访问类内(为了提高程序设计便利)。
2、多态性的实现:重载技术(编译时多态:运算符&函数重载)、虚函数(运行时多态:virtual)---->(为了设计通用程序)。
3、Other Technologies:
实现类型转换与拷贝的构造函数
多重继承--->冲突、支配规则和赋值兼容性、虚基类
虚函数、纯虚函数、静态成员
const、volatile对象和成员函数
指向类成员的指针
一般来说C++相对与Java这样的纯面向对象语言的特点在于:一、需要完全兼容C语言,导致语法历史遗留问题。二、功能过于庞大的OO机制以及一些便利的方法(如第3点Other Technologies),导致头绪过多。
<2014 04 15> C++语言回顾精要(原创By Andrew)的更多相关文章
- 04 Zabbix核心概念回顾
04 Zabbix核心概念回顾 1. 监控四大核心功能: 数据采集----数据储存----数据展示和数据分析-----告警 1.1. 数据采集方式: SNMP:被监控设备上面必须启用SNMP a ...
- mini2440移植uboot 2014.04(三)
我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文档: s3c2440手册(下载地址) ...
- 2014.04.28基于CPLD的LCOS场序彩色视频控制器设计
基于CPLD的LCOS场序彩色视频控制器设计 作者:宋丹娜,代永平,刘艳艳,商广辉 发表刊物:液晶与显示,2009 学习时间:2014.04.28 文章讲述了-- (和上一篇论文有些相似之处) 1. ...
- ApexSql Log 2014.04.1133破解版&补丁
已上传最新的2016版本,请移步: http://www.cnblogs.com/gsyifan/p/ApexSql_Log_2016_Crack.html 状态不好,鬼使补差的跑到服务器上updat ...
- SAP-MM:收货转储时提示 M7053“只能在公司代码 **** 的期间 2014/04 和 2014/03 中记账”
错误信息 消息号M7053 解决方法 Step 1.使用MMPV进入"关闭账期"界面. Step 2.输入"公司代码"."期间".& ...
- ubuntu12.04&15.04 安装lamp(12.04为主)
ubuntu 12.04&15.04下安装lamp环境 注意:如果是ubuntu15.04下,apache2.4.10的话,直接在/etc/apache2/apache2.conf文件的后边直 ...
- new Date('2014/04/30') 和 new Date('2014-04-30') 的区别
new Date('2014/04/30') Wed Apr 30 2014 00:00:00 GMT+0800 (中国标准时间) new Date('2014-04-30'); Wed Apr 30 ...
- mini2440移植uboot 2014.04(七)
上一篇博文:<mini2440移植uboot 2014.04(六)> 代码已经上传到github上: https://github.com/qiaoyuguo/u-boot-2014.04 ...
- mini2440移植uboot 2014.04(六)
上一篇博文:<mini2440移植uboot 2014.04(五)> 代码已经上传到github上:https://github.com/qiaoyuguo/u-boot-2014.04- ...
随机推荐
- c++ abs与fabs
在stdlib.h中定义的abs只针对整数取决对值,如果要对浮点数取绝对值,应该用fabs(或fabsf). 而math.h中定义的abs是可以对浮点数取绝对值的. 所以如果包含了stdlib.h和m ...
- 多线程-Condition
关键字synchronized与wait和notify/notifyAll方法相结合可以实现等待/通知模式,类ReentrantLock也可以实现同样的功能,但需要借助于Condition对象.Con ...
- 【Objective-C】01-Objective-C概述
前言 目前来说,Objective-C(简称OC)是iOS开发的核心语言,在开发过程中也会配合着使用C语言.C++,OC主要负责UI界面,C语言.C++可用于图形处理.近来,流传Ruby.C#也可以开 ...
- css 的通用样式 设置 和倒计时功能 移动轮播图的手势滑动的功能
body{ line-height:1.4; color:#333; font-family:arial; font-size: 12px; background:white; } input,tex ...
- vs2017 vs2013等vs中如何统计整个项目的代码行数
在一个大工程中有很多的源文件和头文件,我如何快速统计总行数? ------解决方案--------------------b*[^:b#/]+.*$^b*[^:b#/]+.*$ ctrl + shif ...
- 如何让linux加载当前目录的动态库
debian从7.0开始支持multiarch,64位库的路径改到/usr/lib/x86_64-linux-gnu了,mint.ubuntu这些衍生版有没有跟着改我就不清楚了. deepin lin ...
- Jquery学习笔记(9)--注册验证复习(未用到ajax)
纯复习,在$(this).val()这里浪费了时间,val()只适合input里面的value值,如果是span等标签里包裹的文本要用text()!! <!DOCTYPE html> &l ...
- HTML页面中直接加载其他JSP页面
1.在经典的框架中填充页面时 要填充2处的页面,2处为内容页面,是另外的一个JSP页面 2.左侧页面代码 <%@ page language="java" import=&q ...
- tree 命令使用技巧
一.简介 tree命令可以以目录树的形式显示指定(默认显示这个文件系统)目录的所有文件夹和文件 二.使用 显示一个目录 $ tree folder Tips:如果文件夹有中文,则会显示一串转移字符,使 ...
- windows下搭建ffmpeg+nginx+rtmp-module搭建实时视频环境
下载ffmpeg的Windows静态版: https://ffmpeg.zeranoe.com/builds/win64/static/下载nginx-rtmp-windows版:https://gi ...