![](https://img-blog.csdnimg.cn/20190829153645875.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++深度解析
LQJW
这个作者很懒,什么都没留下…
展开
-
C++ getline函数用法详解
虽然可以使用 cin 和 >> 运算符来输入字符串,但它可能会导致一些需要注意的问题。当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格、制表符或换行符)。一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。以下面的语句为例:cin >> namel;可以输入 "Mark" 或 "Twain",但不能输入 "Mark T...转载 2019-10-18 11:40:13 · 425 阅读 · 0 评论 -
C++ 值传递,地址传递和引用传递
首先,看以下三段代码。1.void swap1(int x, int y) { int tmp=x; x=y; y=tmp; print(“x=%d, y=%d\n”, x, y);}void main(){ int a=2,b=7; swap1(a,b) ; printf(“a=%d, b=%d\n”, a, b);}输出结果是什么?...转载 2019-10-17 15:31:35 · 1296 阅读 · 1 评论 -
C++ 内存泄露的原因及检测
一、原因1. 在类的构造函数和析构函数中没有匹配的调用new和delete函数 两种情况下会出现这种内存泄露: 一是在堆里创建了对象占用了内存,但是没有显示地释放对象占用的内存; 二是在类的构造函数中动态的分配了内存,但是在析构函数中没有释放内存或者没有正确的释放内存2.没有正确地清除嵌套的对象指针3.在释放对象数组时在delete中没有使用方括号...原创 2019-10-15 10:55:15 · 581 阅读 · 0 评论 -
C++ 浅拷贝和深拷贝
对一个已知对象进行拷贝,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函数。//student.h#ifndef STUDENT_H#define STUDENT_Hclass Student{ private: int num; char *name;...转载 2019-10-13 23:48:44 · 113 阅读 · 0 评论 -
C++ 怎么才能不回显的输入密码?getch、getpass的使用
方法一、getch()函数—— Windows环境下头文件#include<conio.h>getch()函数会读取一个输入的字符,但是并不会在屏幕上显示出# include <iostream.h> # include <stdio.h># include <conio.h> int main(){ cha...原创 2019-08-29 16:12:51 · 2053 阅读 · 1 评论 -
C++ sizeof 深入 - 对齐与补齐
Linux环境下一、不同数据类型所占用的内存大小32位64位char11int4大多数4,少数8short2...原创 2019-08-30 10:21:26 · 372 阅读 · 0 评论 -
C++ 空类和空结构体的大小为什么是1?
引言首先看两个小程序:#include<stdio.h>typedef struct A{ //int as;}a;int main(){ printf("%d\n",sizeof(a)); //输出 0}#include<iostream>#include<cstdio>using namespace std; st...原创 2019-08-30 20:37:10 · 1478 阅读 · 0 评论 -
C++ string、const char*、 char* 、char[ ]相互转换(全)
string、const char*、 char* 、char[]四者类型经常会需要转化。一:转化总结形式如下:使用时,要对源格式和目标格式进行初始化。源格式赋值为具体的内容,目标格式赋值为空。 \ 目标格式 源格式 string const char* char* char[ ] string NULL cons...转载 2019-09-17 18:59:33 · 6007 阅读 · 1 评论 -
c++ 初始化列表 详解
一、定义与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。class foo{private: string name; int id;public: foo(string s, int i):name(s), id(i){} ; // 初始化列表};从概念上来讲,...转载 2019-09-17 19:18:03 · 1049 阅读 · 0 评论 -
C++ 通过Java理解 get/set方法
一、引遇到了一个问题,有了构造函数,那么为什么还需要set函数和get函数呢?编程语言都有其相似之处,get和set在Java是很常用的函数,通过借鉴其用法,来深入了解 C++二、主要区别构造方法主要用于:定义一种规则,初始化值set()与get()主要用于:修改值,获取值。三、封装、安全在C++面向对象编程时,会用private来修饰成员变量,如此一来其他类,则不能...原创 2019-09-17 19:50:25 · 613 阅读 · 2 评论 -
C++ 指针作为函数参数传递的问题
一、引两个问题第一个问题是这样的:写一个函数,交换两个参数中的值。初学者往往会这样写:void exchange(int x, int y){ int p=x; x = y; y = p;}之后,你会查找资料了解到应该这样写:void exchange(int *x, int *y){ int *p=x; *x ...转载 2019-09-24 16:49:31 · 2483 阅读 · 2 评论 -
C++ main函数--参数argc,argv解析
写main函数时,经常会直接写int main()其实main是带有参数argc,argv的int main(int argc, char** argv)int main(int argc, char* argv[])这两个参数的作用:argc 是指命令行输入参数的个数(以空格分隔)argv 存储了所有的命令行参数举个例子:#include <iostre...原创 2019-08-29 13:09:28 · 1566 阅读 · 1 评论 -
C++ static 用法解析
一、修饰变量1. 局部变量普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰符)都属于这个范畴。编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。普通局部变量存储于进程栈空间,使用完毕会立即释放。静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全...原创 2019-08-26 19:41:39 · 187 阅读 · 0 评论 -
C++ 引用
变量名实质上是一段连续内存空间的别名,是一个标号(门牌号)程序中通过变量来申请并命名内存空间通过变量的名字可以使用存储空间1、引用的基本特性在c/c++中指针的作用基本都是一样的,但是c++增加了另外一种给函数传递地址的途径,这就是按引用传递(pass-by-reference)引用就是取别名,声明一个标识符为引用,就表示该标识符是另一个对象的外号注意:C++中的引用是一种取别...原创 2019-08-22 22:16:16 · 85 阅读 · 0 评论 -
C++ 重载下标运算符 [ ]
下标操作符 [ ] 常用于在容器类型中以下标方式获取元素下标运算符重载函数只能定义成员函数: 类型& operator[](形参) { }在 C++ 中,在重载下标运算符 “[ ]” 时,认为它是一个双目运算符,例如 X[Y] 可以看成:[ ]-----双目运算符;X-----左操作数;Y-----右操作数。其相应的运算符重载函数名为...原创 2019-08-24 15:02:27 · 2005 阅读 · 0 评论 -
C++ new/delete和new[ ]/delete[ ] 深入解析
在C语言中,用malloc/free 从堆里面动态申请出来一段内存。但对这一块申请出来的内存,往往还需要对它进行初始化 。虽然C语言提供了calloc来开辟一段初始化好(0)的内存,但面对各式各样的数据成员初始化,它同样束手无策。同时,为了保持良好的编程习惯,应该对申请出来的内存手动进行初始化。在C++中有了new/delete, new []/delete[] ,用它们便可较方便地实现...原创 2019-08-24 21:37:54 · 384 阅读 · 0 评论 -
C++ this指针深度解析
一、C++ 程序到C程序的翻译C++ 是在C语言的基础上发展而来的,第一个 C++ 的编译器实际上是将 C++ 程序翻译成C语言程序,然后再用C语言编译器进行编译。C语言没有类的概念,只有结构,函数都是全局函数,没有成员函数。翻译时,将 class 翻译成 struct、对象翻译成结构变量是显而易见的,但是对类的成员函数应该如何翻译?对myCar.Modify();这样通过一个对象调用成员函数...原创 2019-08-20 20:27:41 · 570 阅读 · 2 评论 -
C++ const对函数重载的影响
重载,是指允许存在多个同名函数,而这些函数的参数表不同,即函数名相同但函数的签名不同重载是在编译阶段实现的,编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数一、const 修饰成员函数时的重载第一种情况:#include<iostream> using namespace std; void fun(const int i...原创 2019-08-20 21:00:07 · 2972 阅读 · 2 评论 -
C++ “.”和“->”的辨析
1、A.b则A为对象或者结构体;2、A->b则A为指针,->是成员提取,A->b是提取A中的成员b,A只能是指向类、结构、联合的指针;例如:class student{public: string name[20];}第一种情况,采用指针访问 student *xy,则访问时需要写成 (*xy).name="hhhhh";等价于xy-&...原创 2019-08-24 22:40:46 · 425 阅读 · 0 评论 -
C++ const char *a、char * const a、char const *a、const char * const a 解析
1、const char *a:声明(*a),(*a)是const char类型的。a被一个解引用运算符修饰,故a是个普通的指针,可以修改,但是a所指向的数据(即*a)由于const的修饰而不可通过指针a去修改。但可以通过其它方式修改a所指向的数据#include<iostream>using namespace std;int main(){ char n='...原创 2019-08-20 23:46:15 · 7841 阅读 · 0 评论 -
C++ fstream/ifstream/ofstream 类用于进行文件操作
一、ofstream // 输出文件流,向文件写内容#include<iostream>#include <fstream>using namespace std;int main() { ofstream file1("ofstream.txt"); file1 << "hello world"; file1.close();}二、...原创 2019-08-25 21:37:07 · 718 阅读 · 0 评论 -
C++ 指针函数和函数指针的用法和区别
一、指针函数定义指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。声明格式为:类型标识符 *函数名(参数表)int fun(int x,int y);//一个普通函数,然后返回值是一个 int 类型,是一个数值。int* fun(int x,int y);//在函数名前面多了一个*号,而这个函数就是一个指针函数。其返回值是一个 int ...原创 2019-08-21 20:46:20 · 1091 阅读 · 0 评论 -
C++ typedef的用法
一、给已定义的变量类型起个别名typedef unsigned char uin8_t;//uint8_t就是unsigned char的别名typedef struct __person{ char name[20]; uint8_t age; uint8_t height;}person_t;//作用是给struct __pers...原创 2019-08-21 21:08:51 · 268 阅读 · 0 评论 -
C++ 重载输入输出运算符
一、为什么要重载输入输出运算符平时可以用流 std::cout<<str<<n ; std::cin>>str>>n ; 输出、输入字符串和整型等。但是对于自定义的类,比如 Student 类,却不能直接通过 cout<<Student 或 cin>>Student 这样的形式来输出类的内容或给类赋值。为了让自定义的类也支...原创 2019-08-24 11:55:24 · 7122 阅读 · 2 评论