重拾C++ 基础知识总结(一)

1、使用gcc编译c++文件报错

proc1.cc:(.text+0x14): undefined reference to `std::cout‘

C++程序使用gcc命令只能编译,不能链接库文件

应该使用g++编译

2、运行一个程序之后可以使用 echo $? 返回该程序返回值(main函数的返回值必须是一个int型的数值)

3、endl是一个特殊值,成为操纵符,将它写入输入流时,具有输出换行的效果,并刷新与设备相关联的缓冲区中。

调试过程中的输入语句都应该使用endl刷新输出流。

4、#include <iostream>

为预处理指示,标准库使用 "< >",添加自己定义的头文件时使用双引号

#include "head.h"

5、c++程序中使用的每一个名字必须在使用之前声明

6、

#include <iostream>

using namespace std;

int main(){

int temp;

int acount=0;

while(cin>>temp)

acount+=temp;

cout<<acount<<endl;

}

其中的while循环是一个死循环,当遇到文件结束符或者读到的不是一个整型数的时候就会结束循环

windows中的文件结束符是 control+z ,Linux/Unix中文件结束符是 control+d

7、一般将一个类的定义放到一个文件中(.h 头文件),要使用该类就要包含这个文件

每个类定义一个类型,类型名与类名相同

8、c++中的数据类型中,整型值short、int、long存储空间不同,一般的short为机器字长的一半,int为机器字长,long类型为一个或者两个机器字长(在32位机器中int类型和long类型通常字长是相同的,都为4个字节,long类型的数字表示2^32为-2147483648)。short、int、long默认都为带符号整数。

c++中的float类型浮点数默认保留6位有效数字,double默认保留10位有效数字

9、0开头的字面值常量表示八进制数字,0x开头表示16进制数字。定义long类型数据时应该在数值的后面加上“L”表示long类型数值

10、为了兼容C语言,c++中所有字符串字面值都有编译器自动在末尾添加一个空字符。

宽字符串:

11、c++中标识符不能包含两个连续的下划线,也不能以下划线开头后面紧跟一个大写字母

命名习惯:变量名一般用小写字母,标识符包含多个单词书写为在每个词之间添加一个下划线,或者每个内嵌的词的第一个字母都大写(驼峰式)

12、

int ival(1024); // 直接初始化

int ival = 1024; // 复制初始化

c++中的初始化分为直接初始化和复制初始化,直接初始化更灵活且更加高效。对内置类型来说,复制初始化与直接初始化是没有区别的,都是提供一个值并把这个值复制到新定义的对象中。对类类型的对象来说,有些初始化仅能使用直接初始化来完成。

内置类型变量自动初始化:函数体外定义的内置类型变量自动初始化为0,函数体内的内置类型变量不自动初始化

类类型变量初始化:通过定义一个或多个构造函数控制类对象的初始化

c++中的初始化应该理解为 “创建对象并赋值”

13、c++区分声明与定义:

变量的定义用于为变量分配内存空间,还可以为变量指定初始值,在一个程序中,变量有且仅有一个定义。通常把一个对象定义在它首次使用的地方是一个很好的办法

声明用于向程序表明变量的类型和名字。定义也是声明,当定义变量时我们声明了它的类型和名字。通过使用extern关键字声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的extern:

extern int i; // 声明但没有定义i

int i; // 声明并定义i

extern声明并不是定义,也不分配存储空间,事实上,它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。

只有当extern声明位于函数外部时,才可以含有初始化式。

14、作用域:定义在所有函数外部的名字具有全局作用域,可以在程序任何地方访问。

局部作用域在一个函数内部,函数外部不能访问局部作用域。c++中作用域可以嵌套,局部作用域变量可以屏蔽全局作用域变量

c++中还有另外两种作用域:类作用域,命名空间作用域

15、const对象默认为文件的局部变量:

在全局作用域中定义非const变量时,它在整个程序中都可以访问,我们可以把一个非const变量定义在一个文件中,假设已经做了合适的声明,就可以在另外的文件中使用这个变量:

// file_1.cpp

int counter; // 定义

// file_2.cpp

extern int counter; // 使用file_1中的counter

++conuter; // 定义在file_1中的counter自增

与其他变量不同,除非特别说明,在全局作用域声明的const变量是定义该对象的文件的局部变量,此变量只存在与那个文件中,不能被其他文件访问。通过指定const变量为extern,就可以在整个程序中访问const对象。

非const变量默认为extern,要使const变量能够在其他文件中访问,必须显示的指定为extern

16、引用就是对象的另一个名字,引用主要用作函数的形式参数

引用是一种复合类型,通过在变量名前面添加“&”符号来定义。在引用的情况下,每一种引用类型都“关联到”某一其他类型。不能定义引用类型的引用

引用必须用与该引用同类型的对象初始化:

int ival = 1024;

int &refVal = ival; // refVal引用ival

int &refVal2; // 错误,引用必须初始化

int &refVal3 = 10; // 错误,引用必须用对象初始化

不可能将引用绑定到另一个对象,初始化是指明引用指向哪个对象的唯一方法。

const引用:

const引用是指向const对象的引用:

const int ival = 1024;

const int &refVal = ival; // 对象与引用都是const

int &refVal2 = ival; // 错误,非const引用指向const对象

const引用可以初始化为不同类型的对象或者初始化为右值(字面值常量):

int i = 1024;

const &ref = 42;

const &ref2 = r+i;

const引用可以绑定到一个非const对象上,这样引用本身就是只读的,而且一直指向这个对象,但是对象的值却可以通过操作对象本身改变

#include <iostream>

using namespace std;

int main(){

int i = 1024;

const int &ref = i;

cout<<"ref="<<ref<<endl; // 1024

cout<<"i="<<i<<endl; // 1024

i = i+1;

cout<<"ref="<<ref<<endl; // 1025

cout<<"i="<<i<<endl; // 1025

}

17、typedef double wages; // 类型别名,强调使用类型的目的

18、枚举(enum):

enum open_modes {input, output, append};

默认的,第一个枚举成员赋值为0,后面的每个枚举成员赋的值比前面的大1.

enum Forms {shape = 1, sphere, cylinder, polygon }; // 显示赋值:shape = 1, sphere = 2, cylinder = 3, polygon = 4

赋值: Forms f = shape;

枚举成员可以是不唯一的

enum Points {point2d = 2, point2w, point3d = 3, point3w };

19、类类型:每个类都定义了一个接口和一个实现。接口由使用该类的代码需要执行的操作组成。实现一般包括该类所需要的数据和定义该类需要但又不供一般使用的函数。

类定义首先定义类的接口!!!*******花括号后面必须要跟一个分号******!!!

class Sales_item {

public:

// 定义Sales_item对象的操作

private:

std:string isbn;

unsigned units_sold;

double revenue;

};

定义变量与定义数据成员的区别:一般不能把类成员的初始化作为其定义的一部分,当定义数据成员时,只能指定该数据成员的名字和类型。类不是在类定义数据成员时初始化数据成员,而是通过构造函数控制初始化。

20、struct与class关键字定义类的唯一区别在于默认访问级别不一样,默认情况下struct的成员为public,而class的成员默认为private

21、c++中的头文件:

头文件为相关声明提供了一个集中存放的位置,头文件一般包含类的定义、extern变量的声明和函数的声明。

为了减少处理头文件的编译时间,有些c++的实现支持预编译头文件

头文件用于声明而不是用于定义(定义就是有存储空间分配,初始化或者不含extern关键字都视为定义)

因为头文件包含在多个源文件中,所以不应该含有变量或者函数的定义(定义只可以出现一次)

头文件不应该有定义的三个例外:头文件可以定义类、值在编译时就已知的const对象和inline函数,这些实体可以在多个源文件中定义,只要每个源文件中的定义是相同的(如果const变量不是用常量表达式初始化,那么它就不应该在头文件中定义)

22、c++预处理:

头文件中经常#include到其他头文件,预处理器用指定的头文件的内容代替每个#include

为了保证多次包含同一个头文件不会引起该头文件定义的类和对象被多次定义,就要使用与处理器定义头文件保护符,头文件保护符用于避免在已经见到头文件的情况下重新处理该头文件的内容

避免多重包含:

为了避免名字冲突,与处理器变量经常用全大写字母表示。与处理器变量有两种状态:已定义和未定义。定义预处理器变量和检测其状态所用的与处理器指示不同。#define指示接受一个名字并定义该名字为预处理器变量。#ifndef指示检测指定的预处理器变量是否为定义。如果预处理器变量未定义,那么跟在其后的所有指示都被处理,知道出现#endif。

#ifndef SALESITEM_H

#define SALESTIEM_H

// 添加Sales_item 类和相关函数(头文件中的内容)

#endif

时间: 2024-10-10 08:31:49

重拾C++ 基础知识总结(一)的相关文章

重拾C++ 基础知识总结(二)

1.标准库string类型: 用户程序要使用string类型对象,必须包含相关头文件 #include <string> 字符串字面值与标准库string类型不是同一种类型,字符串字面值是字符数组,而string是对象 2. int main(){ string s; cin>>s; cout<<"s="<<s<<endl; } string类型的输入操作符: 读取并忽略开头所有的空白字符:读取字符直至再次遇到空白字符,读取终

canvas基础知识

低版本的ie不支持html5,需要引入excanvas.js来让ie支持canvas.检测<canvas id="canvas" width="150" height="200" > 你的浏览器不支持canvas</canvas>var canvas = document.getElementById('canvas');if(canvas.getContext) alert('支持canvas'); >> 绘

重拾C/C++基础

1.复制指针时只复制指针中的地址,而不会复制指针指向的对象2.解决护栏柱错误的根本 是 从思想认知上搞定. 数组的序号为偏移量.  也即: 数组的第一个元素为arrName[0],其偏移量为03.使用strcpy函数时要注意,若是源串的长度大于目标串的长度,将会覆盖缓冲区后面的内容  所以尽量使用strncpy来替代strcpy4.数组可以使一维或者是多维.只要数组包含的元素为内置类型或者有默认构造函数的类,就可以初始化5.数学运算符有5个: +(加) -(减) *(乘) /(除) %(求模)6

[java]基础重拾

7.17 重新学习了包管理 对于没有使用package打包的类,归到默认包.使用其他包名打包类,必须在工程文件夹下新建对应包名的目录.比如 package com.tencent.demo 则需要在工程文件夹下,新建名为com的文件夹,并在com文件夹下新建tencent文件夹,再简历demo文件夹,依次类推. [java]基础重拾

重拾java系列一java基础

前言,不知不觉,从接触java到工作至今已有两年的时间,突然感觉自己的基础知识还很薄弱,有些知识虽然知道,但是停留在表面上,没有深挖,或者实践过,感觉掌握的很肤浅,而且时间一长,就觉得忘记了,我觉得这种状态实在不好,作为一名开发人员,不应该只是会用,能满足需求就满足,而不去深究为什么这样做就行,它的实质是什么,底层到底是怎么样的结构,这样才能达到知其然知其所以然,所以,我觉得在工作闲暇时间,重新对我所认识的java进行一遍梳理,总结,实践,希望我可以坚持下来,争取突破自己!!!         

使用JWT和Spring Security保护REST API,重拾后端之Spring Boot

通常情况下,把API直接暴露出去是风险很大的,不说别的,直接被机器***就喝一壶的.那么一般来说,对API要划分出一定的权限级别,然后做一个用户的鉴权,依据鉴权结果给予用户开放对应的API.目前,比较主流的方案有几种: 用户名和密码鉴权,使用Session保存用户鉴权结果.使用OAuth进行鉴权(其实OAuth也是一种基于Token的鉴权,只是没有规定Token的生成方式)自行采用Token进行鉴权第一种就不介绍了,由于依赖Session来维护状态,也不太适合移动时代,新的项目就不要采用了.第二

Keepalived基础知识

大纲: 一.什么是Keepalived? 二.VRRP协议简介. 三.Keepalived原理. 四.Keepalived配置文件详解. 五.Keepalived配置示例. 一.什么是Keepalived? 什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,那说到keepalived时不得不说的一个协议就是VRRP协议,可以说这个协议就是

【深度分解】听趣拍云产品经理剖析视频基础知识(2)

"随着技术的不断进步,视频技术的制作加工门槛逐渐降低,信息资源的不断增长,同时由于视频信息内容更加丰富完整的先天优势,在近年来已经逐渐成为主流.在基础知识(1)里面已经讲了模拟时代和数字化时代的视频技术.接下来将对视频编码与压缩.画面压缩.运动压缩.互联网视频应用的到来做一个详细的介绍." 视频编码与压缩 视频编码与压缩,是数字化视频非常重要的技术,以至于它直接影响到视频在各个领域的应用.如果没有视频编码技术的不断提高,我们今天也不可能在方方面面享受到视频的便利性. 首先,视频编码是一

Java基础知识二次学习-- 第一章 java基础

基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一章  JAVA简介 时间:2017年4月24日10:23:32 章节:01章_02节 内容:jdk的配置与安装 完成情况:已经完成,cmd中javac提示出相关命令 时间:2017年4月24日10:30:39 章节:01章_04节 内容:输出HelloWorld 完成情况: 已经完成 javac先将