
C++
文章平均质量分 95
SYP35
假如代码欺骗了你,不要悲伤,不要心急, 苦逼的日子里须要镇静,相信吧,快乐的日子将会来临。
展开
-
C++类的构造函数可以私有吗?
通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?没错,我也知道这将会使构造函数成为私有的,这意味着什么?我们知道,当我们在程序中声明一个对象时,编译器为调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私有的,由于在class外部不允许访问私有成员,所以这将导致编译出错。你于...原创 2019-11-19 11:18:14 · 4942 阅读 · 1 评论 -
C语言中的内存对齐
内存对齐的方法和原理原创 2015-08-22 22:38:23 · 881 阅读 · 0 评论 -
C语言的预处理
目录 一.预处理的工作方式... 31.1.预处理的功能... 31.2预处理的工作方式... 3二.预处理指令... 42.1.预处理指令... 42.2.指令规则... 4三.宏定义命令----#define. 43.1.无参数的宏... 43.2带参数的宏... 53.3.预处理操作符#和##. 63.3.1.操作符#. 63.3.2.操作原创 2015-08-10 00:49:36 · 522 阅读 · 0 评论 -
const
1、定义const 只读变量,具有不可变性。 例如: const int Max=100; int Array[Max]; //数组大小Max应该是常量,但是这里Max是只读变量。 这里请在Visual C++6.0 里分别创建.c 文件和.cpp 文件测试一下。你会发现在.c 文件中,编译器会提示出错,而在.cpp 文件中则顺利运行。为什么呢?原创 2015-08-05 16:03:08 · 467 阅读 · 0 评论 -
只能被初始化一次的static变量???
static全局变量是限定作用域的全局变量。 static函数只能被本文件里的内容使用(相当于私有函数),是限定作用域的全局函数。 C++里头的static函数是相对成员函数而言,其调用对象是类,而不是对象。 C++在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝; C++在类中的 static 成员函数属于原创 2015-08-05 04:01:59 · 2259 阅读 · 1 评论 -
getchar()的特殊用法
printf("\n输入第%d学生的信息。\n",i+1);printf("学号:");scanf("%ld",&sno[i]);getchar();printf("姓名:");gets(sname[i]);getchar( );提取输入流中的数据,防止出现下面的姓名变量,你还没输入,就直接被赋值的情况。原创 2015-08-05 03:58:12 · 616 阅读 · 0 评论 -
符号的优先级
优先级运算符 结合律1 ( ) [ ] -> .从左至右2 ! ~ ++ -- (类型) sizeof + - * &从右至左3 * / % 从左至右4 + - 从左至右5 > 从左至右6 >=从左至右7 == != 从左至右8 & 从左至右9 ^ 从左至右10 | 从左至右11 && 从左原创 2015-08-05 03:24:38 · 780 阅读 · 0 评论 -
不同数据类型的计算
1.不同的数据类型进行运算时,必须先转换成同一数据类型。2.数据类型在转换时必须由低向高转换,不需要逐级转换。以下是转换图:char/short---->int---->unsigned---->long---->double原创 2015-08-05 03:11:48 · 1075 阅读 · 0 评论 -
中缀表达式;前缀表达式;后缀表达式;之间的转化
一.表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3 后缀表达式:不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:2 1 + 3 * 前缀表达式:同后缀表达式一样,不包含括号,运算符放在两个运算对象的前面,如:* + 2 1 3 二.表达式的转换: 将中缀原创 2015-09-13 12:43:29 · 904 阅读 · 0 评论 -
public公有继承,protected保护继承,private私有继承
public公有继承protected保护继承private私有继承我们知道类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用.公有继承时,基类的private成员派生类也不可用,基类的public和protected成员在派生类中可直接使用.继承过来(变成派生类相应的public和protected成员)只有publi原创 2015-09-14 13:43:46 · 638 阅读 · 0 评论 -
二级指针和二维数组的比较
#include void func(char ** m){ ++m; cout}int main (){ static char * a[]={"morning","afternoon","evening"}; char ** p; p=a; func(p);原创 2015-09-15 16:18:29 · 556 阅读 · 0 评论 -
C++中的单例模式
单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。 单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做原创 2015-09-30 12:59:14 · 371 阅读 · 1 评论 -
进程和线程的区别
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。通常在一个进程中可以包含若干个线程,它们可以利原创 2015-10-01 12:45:27 · 357 阅读 · 0 评论 -
scanf的深究与清除缓冲区的那些方法
scanf的用法1.scanf函数的一般形式scanf(格式控制,地址表列)int scanf(char *format[,argument,...]);“格式控制”的含义同printf函数;“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串首地址。scanf()函数返回成功赋值的数据项数,出错时则返回EOF。例题 scanf函数输入数据。#inc原创 2015-08-10 20:27:52 · 873 阅读 · 0 评论 -
++i与i++
i++与++i是特殊的自增运算,类似的还有自减操作运算i--与--i。下面从C与C++两个角度来比较这两种形式的运算方式.1.C中简单的地说,++i和i++,作为一个语句单独使用时(如i++;或者++i;),就是i = i + 1,它们之间没有区别。而在作为语句的一部分时,a = ++i相当于i = i + 1; a = i;通过表达式就可以看出,因为++在前,所以是先执行加1操作,再执行原创 2015-08-20 11:32:38 · 628 阅读 · 0 评论 -
cin.get与cin.peek
输入原理:程序的输入都建有一个缓冲区,即输入侧缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而CIN函数直接从输入缓冲区中取数据。正因为CIN函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,CIN函数会直接取得这些残留数据而不会请求键盘输入一:cin.peek#include <iostream>using namespa...原创 2018-12-19 14:10:06 · 371 阅读 · 0 评论 -
C++中的类所占内存空间总结
最近在复习c++的一些基础,感觉这篇文章很不错,转载来,大家看看!类所占内存的大小是由成员变量(静态变量除外)决定的,成员函数(这是笼统的说,后面会细说)是不计算在内的。摘抄部分:成员函数还是以一般的函数一样的存在。a.fun()是通过fun(a.this)来调用的。所谓成员函数只是在名义上是类里的。其实成员函数的大小不在类的对象里面,同一个类的多个对象共享函数代码。而我们访问类的成员...原创 2018-10-09 01:14:51 · 207 阅读 · 0 评论 -
虚函数表
C ++的虚函数(虚函数)是通过一张虚函数表(虚拟表)来实现的。简称为V-Table。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承,覆盖(覆盖)的问题,保证其能真实的反应实际的函数。这样,在有虚函数的类的实例中这张表被分配在了这个实例的内存中,所以当我们用父类的指针操作一个子类的时候,这张虚函数表就显得尤为重要了,他就像一个地图一样,指明了实际所应该调用的函数。说明:虚函数...原创 2018-06-11 14:08:08 · 625 阅读 · 0 评论 -
C++ const
看到const关键字,C ++程序员首先想到的可能是const常量。这可不是良好的条件反射。如果只知道用const定义常量,那么相当于把火药仅用于制作鞭炮.const更大的魅力是它可以修饰函数的参数,返回值,甚至函数的定义体。const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C ++程序设计书籍建议:“Us...原创 2018-05-10 17:09:29 · 270 阅读 · 0 评论 -
字符型char和整型int之间的关系
在C语言中并没有char类型的常量(但是在C++中却有,字符常量都是char类型),其实是用int表示char,字符型与整型相比只是更加节省内存。(在所有数据类型中,char类型占用的内存空间最少) 有符号的字符表示-128~127,无符号字符表示0~255。char相当于signed char还是unsigned char取决于编译器。 字符型数据在内存中是以二进制形式存放的,并不是真正的把...原创 2018-05-02 00:04:01 · 948 阅读 · 0 评论 -
内存地址分布
看下面一段代码[CPP]查看普通复印#包括<比特/ STDC ++小时。>使用命名空间std; int main(){int a,b; //栈的printf(“%X \ n%X \ n”,&一个,和b); int * c = new(int); //堆的printf(“%X \ n”个,C); }运行结果:我也有这样的疑问,记得学习的计算机组成原理上都说栈在高地址往低处增长,堆在低地址...原创 2018-04-19 18:02:39 · 499 阅读 · 0 评论 -
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
C语言中讲讲static变量和static函数有什么作用static关键字有两种意思,你看上下文来判断1,表示变量是静态存储变量 表示变量存放在静态存储区. 2,表示该变量是内部连接 (这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上static) ,也就是说在其它的.cpp文件中,该变量是不可见的(你不能用).当static加在函数前面的时候转载 2015-08-05 02:43:06 · 597 阅读 · 0 评论 -
如何判断合法的立即数
立即数的定义: 每个立即数由一个8位的常数循环右移偶数位得到,其中循环右移的位数由一个4位二进制的两倍表示。如果立即数记为, 8位常数记为immed_8, 4位的循环右移值记作rotate_imm, 则有: =immed_8循环右移(2*rotate_imm) 这样并不是每一个32位的常数都是合法的立即数,只有能够通过上述构造方法得到的才是合法的立即数,下面的常数是合原创 2015-04-06 17:26:56 · 19034 阅读 · 0 评论 -
设计模式
设计模式主要分三个类型:创建型、结构型和行为型。 其中创建型有: 一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。 三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory原创 2015-09-30 10:51:04 · 349 阅读 · 0 评论 -
C语言位域精解
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来原创 2015-08-23 23:59:47 · 362 阅读 · 0 评论 -
位域(位段)
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二原创 2015-08-23 17:17:22 · 659 阅读 · 0 评论 -
二维数组的初始化
二维数组初始化的形式为: 数据类型 数组名[整常量表达式][ 整常量表达式]={ 初始化数据 }; 在{ }中给出各数组元素的初值,各初值之间用逗号分开。把{ }中的初值依次赋给各数组元素。 有如下几种初始化方式: ⑴ 分行进行初始化 int a[2][3]={{1,2,3},{4,5,6原创 2015-10-03 17:06:34 · 974 阅读 · 0 评论 -
c++的深拷贝和浅拷贝
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include iostream>using namespace std;class CExample {private: int a;pub原创 2015-10-07 11:19:39 · 349 阅读 · 0 评论 -
C++源代码如何生成可执行文件
先看一段最简单的代码:#include int main (int argc,char* arg[]){printf("hello world");return 0;}如何把上面的代码转换成可执行的代码呢,通常我们可以用gcc hello.c 在同样的路径下得到一个a.out的可执行文件。其实gcc 编译链接一个可执行文件分为4个步骤: 1 预处理原创 2017-09-01 16:08:49 · 11736 阅读 · 1 评论 -
深入理解C++中public、protected及private用法
初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容易搞糊涂。今天本文就来十分分析一下C++中public、protected及private用法。相信对于大家深入掌握C++程序设计会有很大的帮助。这里我们首先要明白下面几点。1.类的一个特征就是封装,public和private作用就是实现这一目的。所以:用原创 2017-12-15 11:17:07 · 284 阅读 · 0 评论 -
C++覆盖、重载、多态区别 ; 重载、重写(覆盖)、重定义(隐藏)三者区别
覆盖:在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。//coverage.cpp #include using namespace std; class A{public: void ShowMessage(原创 2017-12-15 11:40:01 · 467 阅读 · 0 评论 -
#ifdef _DEBUG用法小结
1#ifdef _DEBUG virtual void AssertValid() const; //assert(断言)valid(有效的,正确的)virtual void Dump(CDumpContext& dc) const; //存储上下文#endif这两个函数是调试用的,第一个函数检查可用性,即是否有效 第二个函数如果未更改的话,最终调用的是Cwnd::Dump原创 2017-12-28 15:01:38 · 10245 阅读 · 1 评论 -
c++异常处理机制示例及讲解
[cpp] 查看纯文本 #include“stdafx.h” 的#include <stdlib.h>中 的#include <crtdbg.h> #include <iostream> //内存泄露检测机制 #define _CRTDBG_MAP_ALLOC #ifdef _DEBUG #define new ne...原创 2018-02-28 10:08:49 · 349 阅读 · 0 评论 -
C++常见面试题
【转载请注明出处】:http://www.cnblogs.com/LUO77/p/5771237.html 1. 结构体和共同体的区别。定义:结构体struct:把不同类型的数据组合成一个整体,自定义类型。共同体union:使几个不同类型的变量共同占用一段内存。地址:struct和union都有内存对齐,结构体的内存布局依赖于CPU、操作系统、编译器及编译时的对齐选项。关于内存对齐,先让我们看四个...转载 2018-03-07 17:08:40 · 286 阅读 · 0 评论 -
进程间通信的方式
多进程:首先,先来讲一下fork之后,发生了什么事情。由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新进程(子进程)的进程 id。将子进程id返回给父进程的理由是:因为一个进程的子进程可以多于一个,没有一个函数使一个进程可以获得其所有子进程的进程id。对子进程来说,之所以fork返回0给它,是...转载 2018-03-07 17:12:23 · 356 阅读 · 0 评论 -
TCP和UDP的区别
TCP和UDP区别TCP和UDP编程区别TCP编程的服务器端一般步骤是: 1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt(); * 可选 3、绑定IP地址、端口等信息到socket上,用函数bind(); 4、开启监听,用函数listen(); 5、接收客户端上来的连接,用函数accept(); 6、收发数据,用函数...转载 2018-03-07 17:14:10 · 285 阅读 · 0 评论 -
C++面试题(二)
我自己总结过一些常见的C++面试题,那个是基于一个同学的腾讯面经所问问题,再加上知识点扩展进行了总结,这个是网上之前就有的版本,比较基础,有些题目总结一下,不能忘了基础:1.求下面函数的返回值( 微软)int func(x) { int countx =0; while(x) { countx ++; x = x&...转载 2018-03-07 17:15:41 · 711 阅读 · 0 评论 -
C++基本数据类型
基本数据类型C++11语言有一组基本类型,对应于计算机的基本存储单元和使用这些单元去保存数据的一些常用方式 ,--------------------------------------------------------------------------------------------布尔型 bool ...原创 2018-03-09 18:02:08 · 434 阅读 · 0 评论 -
C++堆、栈、自由存储区、全局/静态存储区和常量存储区
一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量原创 2017-08-28 15:49:55 · 338 阅读 · 0 评论 -
C++静态成员变量详解
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即::。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和原创 2017-08-11 18:13:20 · 472 阅读 · 0 评论