C++ Primer拾遗

1 程序 = 算法 + 数据

2 结构化编程

C 面向过程
强调算法

3 面向对象编程

C++ 面向对象 强调数据

类是一种规范,描述数据的格式

类 = 数据 + 算法 + 面向对象三大特性(封装、继承、多态)

4 泛型编程

独立于数据类型 强调算法

5 sizeof

sizeof是运算符,对类型一定需要加括号,对变量括号可选

例如:

long long lnum;
cout << sizeof(int) << endl;
cout << sizeof lnum << endl;// 可以不是用括号
cout << sizeof (lnum) << endl;

6 大括号初始化器

//C++98:
int n1 = {24};// 给n1赋值为24
//C++11:
int n2{24};// 等号也可以省略
int n3{};// 不给值,将初始化为0

7 指针声明

int *p1;// C中,强调*p1的类型是int
int* p2;// C++中,强调p2的类型是int*
int * p3;// 推荐声明方式

8 延时函数

clock()返回程序开始执行后的系统时间,

有两个问题:

1 clock()返回值的单位不一定是秒;

解决方法:

CLOCKS_PER_SEC,每秒钟包含的系统时间单位数。

2 其返回值类型有可能是long也有可能是unsigned long,有操作系统觉得;

解决方法:

clock_t类型,系统将其定义为使用的类型。

#include <stdio.h>
#include <time.h>

void main()
{
    int sec;
    printf("Enter the delay time in seconds:");
    scanf("%d", &sec);
    clock_t delay = sec * CLOCKS_PER_SEC;
    printf("start...\a\n");
    clock_t start = clock();
    while(clock() - start < delay);
    printf("done\a\n");
}  

程序将秒转换成系统时间单位,避免每次循环都将系统时间转换为秒,效率更高。

9 C++11的类初始化

class Classy
{
	int m_mem1 = 10;
};

时间: 2024-10-12 23:18:30

C++ Primer拾遗的相关文章

C++primer拾遗(第一章:开始)

本系列将总结正在阅读的C++primer这本书中值得注意又容易忘记的知识点. 1. 当return语句包括一个值时,次返回值的类型必须与函数返回类型相同. 2. 操纵符 endl.写入该符号的效果是:1. 结束当前行(回车).2. 将与设备关联的缓冲区中的内容刷到设备中. 3. 注释界定符(/**/)不能嵌套. 4. istream对象遇到文件结束符时候状态变为无效(0,false).windows的文件结束符为Crtl +z:linux的为Crtl+D. 5. 包含对于不属于标准库的头文件,用

C++primer拾遗(第十章:泛型算法)

泛型算法,重要而且常用.虽然只是看了一遍书,但是感觉需要研究的地方还很多. 总结不易,转载注明出处,谢谢. http://www.cnblogs.com/linhaowei0389/

C++primer拾遗(第九章:顺序容器)

第九章顺序容器的总结,太常用了所以太重要了. 不过里面的string部分太多,没有写上来,以后要用的时候直接查书吧 总结不易,转载注明出处,谢谢. http://www.cnblogs.com/linhaowei0389/

C++拾遗--lambda表达式

C++拾遗--lambda表达式 前言 有时,我们需要在函数内部频繁地使用某一功能.此时,我们可以把这种功能写成一个独立的函数.而实际上,这个新的函数很可能是不需要在其它的地方进行调用的.我们想限定它的作用范围,最好是仅限于当前函数.而函数的内部是不可以重新定义其它的函数的.为了解决这个问题,在新的标准中,C++引入了lambda表达式(lambda expression)的概念.有了lambda表达式,C++向一门完美的语言又进了一大步.总的来说,lambda表达式极大地提升了C++的函数运用

C++拾遗--this指针

C++拾遗--this指针 前言 在用C++进行面向对象编程时,this指针是一个人尽皆知的东西.但我们真的清楚它吗?下面我们对它的存在意义和使用方法一一进行探讨. this指针 存在意义:我们为何需要this指针? 看一个简单的例子 #include <iostream> using namespace std; class MyClass { protected: int a; public: MyClass(int a) :a(a) {} void setA(int a) { this-

位运算总结&amp;拾遗

JavaScript 位运算总结&拾遗 最近补充了一些位运算的知识,深感位运算的博大精深,此文作为这个系列的总结篇,在此回顾下所学的位运算知识和应用,同时也补充下前文中没有提到的一些位运算知识. 把一个数变为大于等于该数的最小的2的幂 一个数为2的幂,那么该数的二进制码只有最高位是1. 根据这个性质,我们来举个栗子,比如有数字10,转为二进制码后为: 1 0 1 0 我们只需把 0 bit的位置全部用1填充,然后再把该二进制码加1就ok了.而x | (x + 1)正好可以把最右边的0置为1,可是

C++ Primer快速学习 第一章 入门

很多人说C++Primer不适合于入门,本系列入门文章向大家证明了:这是一个谎言. 第一章 入门 本章介绍 C++ 的大部分基本要素:内置类型.库类型.类类型.变量.表 达式.语句和函数. 1.1. 编写简单的 C++ 程序 每个 C++ 程序都包含一个或多个 函数 ,而且必须有一个命名为 main.函数 由执行函数功能的语句序列组成.操作系统通过调用 main 函数来执行程序, main 函数则执行组成自己的语句并返回一个值给操作系统. 下面是一个简单的 main 函数,它不执行任何功能,只是

C++拾遗--多线程:临界区解决子线程的互斥

C++拾遗--多线程:临界区解决子线程的互斥 前言 为了解决子线程的互斥问题,windows系统提出了关键段或临界区(CRITICAL_SECTION)的概念.它一共有四个共两对操作:初始化.销毁,进入.离开.它们定义在头文件synchapi.h中. 1.初始化变量 VOID WINAPI InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); 2.销毁变量 VOID WINAPI DeleteCriticalSect

C++拾遗--多线程:原子操作解决线程冲突

C++拾遗--多线程:原子操作解决线程冲突 前言 在多线程中操作全局变量一般都会引起线程冲突,为了解决线程冲突,引入原子操作. 正文 1.线程冲突 #include <stdio.h> #include <stdlib.h> #include <process.h> #include <Windows.h> int g_count = 0; void count(void *p) { Sleep(100); //do some work //每个线程把g_c