C++知识回顾(一)

  感觉世界都是约定好的,每门语言的第一个程序总是Hello World!但是也有一些书似乎是在追求个性,会用一些其他的,但是是Not Hello World!本人需要再学习一下C++,所以从最基础的开始。世间万物Hello World:

1 // helloworld.cpp
2 #include <iostream>
3 using namespace std;
4
5 int main()
6 {
7     cout << "Hello World!" << endl;
8     return 0;
9 }

  这可能是最简单一个程序了,仅仅是向屏幕打印“Hello World!”这一信息。但其中包含了很多概念:

  • 注释
  • 预处理指令
  • main()函数
  • 输入/输出流

1.注释

  程序第一行为一行注释,以供程序员阅读,编译器会呼略。C++中有两种注释方法:

1 //注释
2 /*注释*/

  使用注释的主要原因:

  (1)说明用途

  解释程序代码中函数作用,包括参数意义,返回值等信息。

  (2)说明复杂代码

  对于控制台的简单程序中,代码阅读可能相对容易一些,但是在一些专业领域,代码可能复杂而深奥,如下代码:

 1 void sort(int inArray[], int inSize)
 2 {
 3     for (int i = 1; i < inSize; i++)
 4     {
 5         int element = inArray[i];
 6         int j = i - 1;
 7         while (j >= 0 && inArray[j] > element)
 8         {
 9             inArray[j + 1] = inArray[j];
10             j--;
11         }
12         inArray[j + 1] = element;
13     }
14 }    

  这是一个排序算法,通过添加注释可以解释内部的一些令人迷惑的代码。

  (3)传递元信息

  提供创建代码的详细信息,但不涉及代码的特定行为,如加入作者信息,创建日期等等。

2.预处理指令

  生成一个C++程序有三个步骤。首先,代码在预处理器中运行,预处理器识别代码中的元信息。随后,代码被编译或转换为计算机可识别的目标文件。最后,通过链接变成一个应用程序。预处理命令以#开始,第一个程序中的#include <iostream>便是,意思是提取<iostream>头文件的内容给当前文件。如果不包含这个头文件,甚至无法完成输出文本的任务。

常见的预处理指令:

预处理指令 功能
#include [file]
指定的文件插入到代码中指令所在的位置

#define [key][value] 每个制定的key被替换为指定的值

#ifdef[key]

#ifndef[key]

#endif


在ifdef块或ifndef块中的代码被有条件的

包含或者舍弃,这取决于是否使用#define

定义了指定的key

#prama [xyz]
xyz因编译器而异。如果预处理期间执行到这

一指令,通常会显示警告或错误信息

  以下是使用预处理器指令避免重复包含:

1 #ifndef HEADER_H_
2 #define HEADER_H_
3 // .........................
4 #endif

  若编译器支持#pragma once指令,可用下面代码重写上面的代码:

1 #pragma once
2 // ..........................

3.main()函数

  main()是程序的入口。其返回值是一个int类型,指示程序的最终运行状态。可以有参数,也可以有两个参数:

int main(int argc, cha *argv[])

  其中argc给出传递给程序的参数数目,argv包含这些参数。

4.输入/输出流

  基本的输出流是std::cout,此外还有std:cerr。<<将数据插入到流中。std::endl代表序列的结尾,当输出流遇到std::endl时,就会将所有内容输出并转移到下一行。还有\n也可以。\n是一个转义字符,是一个换行符。下面是最常见的转义字符:

\n    换行

\r     回车

\t     制表符

\\     反斜杠符

\"     引号

  流也可以接受用户输入,最简单的是使用>>。std::cin输入流接受用户键盘输入。

参考:

Marc Gregoire, Nicholas A. Solter, Scott J. Kleper, C++高级编程,清华大学出版社,2012,ISBN:978-7-302-29897-7

时间: 2024-10-10 20:35:30

C++知识回顾(一)的相关文章

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁

1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定.假设我们事先不知道同步函数用的是什么锁:如果在同步代码块中指定的某个锁(测试)和同步函数用的锁相同,就不会出现线程安全问题,如果锁不相同,就会发生线程安全问题. 看下面的代码:t1线程用的同步锁是obj,t2线程在操作同步函数的资源,假设不

JS基础知识回顾:引用类型(一)

在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起,而对象时引用类型的一个实例. 尽管ECMAScript从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构,所以虽然说引用类型与类看起来想死,但他们并不是相同的概念. 不过引用类型有的时候也可以被称为对象定义,因为他们描述的是一类对象所具有的属性和方法. 新对象是使用new操作符后跟一个构造函数来实现的,构造函数本身就是一个函数,只不过该函数时处于创建新对象的目的而定义的. ECMASc

java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream

管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream).管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上.如图所示: 1.管道输入流应该连接到管道输出流 ,输入流和输出流可以直接连接       2.使用多线程操作,结合线程进行操作.通常由某个线程从管道输入流中(PipedInputStream)对象读取.          并由其他线程将其写入到相应的端到输出流中.不能使用单线程

java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提

这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提: * 1.必须要有两个以上的线程,才需要同步. * 2.必须是多个线程使用同一个锁. * 3.必须保证同步中只能有一个线程在运行,锁加在哪一块代码 那么我们要思考的地方有:1.知道我们写的哪些是多线程代码 2.明确共享数据 3.明确多线程运行的代码中哪些语句是操作共享数据的.. 4.要确保使用同一个锁. 下面的代码:需求:两个存户分别往银行存钱,每次村100块,分三次存完. class bank{ private int

java基础知识回顾之---java String final类普通方法

辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      *      * 1,获取:     * 1.1 获取字符串中字符的个数(长度).     *         int length();     * 1.2 取字符串中的某一个字符,其中的参数index指的是字符串中序数.字符串的序数从0开始到length()-1 .     *       

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai

C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字节的值,该如何在它上面调用方法? 二:值类型转换为引用类型--装箱 2.1CLR对值类型进行装箱时:新分配托管堆内存,将值类型的实例字段拷贝到新分配的内存中,返回托管堆中新分配对象的地址.这个地址就是一个指向对象的引用. int i = 10; Object obj = i; 三:将引用类型转换为值

java基础知识回顾之---java String final类之intern方法

public class StringObjectDemo { /** * @param args */ public static void main(String[] args) { String hello = "Hello", lo = "lo"; System.out.print((hello == "Hello") + " ");//true System.out.print((Other.hello == hel