C++編程札記「基礎」
一直以為自己最擅長的編程語言是C++,那時自己的水平停留在使用C++來實現數據結構中的各種ADT和ACM算法。
創建一個類,必須實現的成員函數
explicit構造函數
對於單參數構造函數,添加explicit關鍵字之後,會阻止隱式類型轉換(implicit type conversion)現象的出現。- 複製構造函數與
operator=
主要注意實現對整個對象的克隆(即深拷貝(deep copy))。一般的執行策略是,先實現operator=,然後再在複製構造函數中調用。 - 析構函數
尚若類數據成員中存在指針變量,必須在析構函數中進行垃圾回收,避免空指針。
參數傳遞
主要有三種參數傳遞形式:按常量引用調用(call by constant reference)、按值調用(call by value)、引址調用(call by reference)。
使用策略是:如果形參必須能夠改變實參的值,那麼必須使用引址調用;否則,實參的值不能被改變。如果參數類型是簡單類型,則按值調用;否則,對複雜類型,按常量引用調用。
模板(template)|泛型算法
- 函數模板(function template)、類模板(class template):不是真正函數(類),而是一個用以產生函數(類)的公式。
- 函數對象(function object):定義一個包含零個數據和一個成員函數的類,然後通過這個類的實例。從效果上看,通過將其放在對象中實現了函數的傳遞。
- 模板的分離編譯:目前善不支持。
指針
- 在C語言中,關於內存操作的主要由四個函數:
- void* malloc (size_t size)
- void* calloc (size_t num, size_t size)
- void\* realloc (void\* ptr, size_t size)
- void free (void* ptr)
- 動態創建對象new與垃圾回收delete
與數組相關的操作舉例:
cpp int *p = new int[10];//創建數據類型變量 delete p;//垃圾回收 int **p = new int*[10]; //二維數組 for (int i = 0; i < 10; ++i) { p[i]= new int[10]; for (int j = 0; j < 10; ++j) { p[i][j] = i * j; std::cout<<p[i][j]<<std::endl; } } delete [] p;//二維數據的垃圾回收;此時不必考慮數組的維數。 - 取地址運算符(&)
- 指針僅僅是個特殊的變量,只是其存儲的內容是地址值
面向對象
- 抽象性(abstract)「歸類,分類」
- 封裝性(encapsulation)成員的訪問權限限制
- 繼承性(inheritance)「繼承自,派生出」
- 多態性(polymorphism)不同的對象接受到相同的消息時產生完全不同的的行為
C++語言支持兩種多態性: - 編譯時的多態性:通過函數重載實現。
- 運行時的多態性:通過虛函數來實現。
其他
- 友元函數、友元成員與友元類:獲取更大的權限:具備訪問類私有成員的權限。可惜會破壞類的封裝性和數據的隱蔽性,慎用。
- 內聯(inline)函數:使用空間換時間的措施。編譯器會將編譯后的全部內聯函數的目標代碼複製到程序內所有的引用位置并把往返傳送數據也都融合進引用位置的計算當中。
C++編程札記「基礎」的更多相关文章
- JavaScript基礎知識
JavaScript基礎知識 1.標籤組使用 <script charset='utf-8' //設置字元集 defet //使腳本延遲到文檔解析完成,Browser已忽略 language=' ...
- GO語言基礎教程:序章
首先自我介紹一下我自己,我是一個coder,目前主要從事B/S程序開發工作,懂點PHP;ASP;JSP;JS;VB;C;DELPHI;JAVA,另外知道幾個數據庫,除此之外別無所長,那麼我為何會選擇學 ...
- 邁向IT專家成功之路的三十則鐵律 鐵律八:IT人學習之道-基礎功
修練過中國武術的人都知道,任何一種拳法的學習最重要的就是基礎功,而基礎功又可分為內在與外在的修練,內在的修練強調在平心.靜氣.不爭的調息.至於外在這首重在站樁.鬆沉.不疾不徐的應對能力.有了深厚基礎的 ...
- Python 基礎 - 文件的操作
在來我們來玩一下文件操作,這個在未來工作上,也是會很常用到的功能 Python2.7中,可以用file()來打開文件,而在Python3中,一律都是用open(),接下來在當前目錄下,先建立一個空文件 ...
- Python 基礎 - for流程判斷
今天介紹另一個循環判斷式 for循環,首先,先寫一個很簡單的 for循環的代碼 #!/usr/bin/env python3 # -*- coding:utf-8 -*- for i in range ...
- Python 基礎 - if else流程判斷
hmm~前面講了那麼多,終於可以稍稍的正式進入另一個階段,沒錯,要開始寫判斷式了 這次先從最簡單的判斷式開始,if else 開始- Go 首先,之前有寫有一個簡單的互動式 用戶輸入 的代碼,忘記了嗎 ...
- GO語言基礎教程:流程控制
在開始一個新的章節之前先來回顧上一篇文章的部份,首先我們來看這段代碼: package main import ( "fmt" ) func main(){ var x,y int ...
- GO語言基礎教程:數據類型,變量,常量
GO類似PHP,每行的結尾要加分號來結束,不同點在於GO對此並不強制,這一點又像javascript,另外GO的語句塊是用一對大括號來包裹的,但是go要求左大括號必須要在語句的結尾處,不能在行首出現左 ...
- [转] 編程風格要素-The Elements of Programming Style 中文英文中英對照
转自: http://www.loliman3000.com/tech/2fe33ce32906f0302412881.php 下面的程序風格規則提煉自Brian Kernighan和P. J. Pl ...
随机推荐
- 使用APICloud设计物联网APP
0.前言 1).APP功能: 1.控制室内插座的开关. 2.查看室内实时温湿度和温湿度趋势. 3.控制小车的行走,小车摄像头的开启/关闭.移动. 4.查看摄像头监控画面,可拍照并追溯. 5.查看服务器 ...
- supervisor 部署文档
supervisor 部署文档 supervisor 需要Python支持,如果不用系统的supervisor,单独安装python python 安装 #依赖 yum install python- ...
- H5与Activity之间的通信(调用)
1.通过H5页面的超链接尾部信息不同进行跳转(类似于URL拦截器) 例如:控件x的href="http://www.example.com/?menu_id=1", 在代码中添加w ...
- (转)PHP函数spl_autoload_register()用法和__autoload()介绍
转--http://www.jb51.net/article/29624.htm 又是框架冲突导致__autoload()失效,用spl_autoload_register()重构一下,问题解决 ...
- Java序列化的机制和原理
Java序列化的机制和原理 本文讲解了Java序列化的机制和原理.从文中你可以了解如何序列化一个对象,什么时候需要序列化以及Java序列化的算法. 有关Java对象的序列化和反序列化也算是Java基础 ...
- Java面向对象的概念以及OOP思想的优点
传统面向过程程序设计的思路: 先设计一组函数用来解决一个问题,然后确定函数中需要处理的数据以及存储位置. 面向对象的设计的思路: 先确定处理的数据,然后确定处理数据的算法,最后将数据和算法封装在一起构 ...
- [转]MySQL导入和导出SQL脚本
首先,使用mysqldump命令的前提是,在Cmd中进入mysql安装目录下的bin目录下,才可以使用该命令.我的mysql安装在E:盘,所以,首先进入bin目录下:E:/Program Files/ ...
- 读书笔记 |Google C++编程风格指南
Google C++编程风格指南 ## 0. 背景 每一个C++程序员都知道,C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,这种复杂会使得代码更易于出现bug.难于阅读和维护. 本指 ...
- 【cogs247】售票系统
[问题描述] 某次列车途经C个城市,城市编号依次为1到C,列车上共有S个座位,铁路局规定售出的车票只能是坐票, 即车上所有的旅客都有座.售票系统是由计算机执行的,每一个售票申请包含三个参数,分别用O. ...
- mysql for linux 数据库的安装过程
mysql for linux 数据库的安装过程 l 安装版本:mysql-advanced-5.6.12-linux-glibc2.5-x86_64.tar.gz ,此版本是绿色版本,只需要将其解 ...