![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
我在关山口开摇摇车
精通Cpp,JAVA,Python开发环境的卸载。各类数据库删库大神级别。
展开
-
C++反射的实现
#ifndef CLASSFACTORY_H#define CLASSFACTORY_H#define REFISTERFUNPTRBV(className) typedef bool (className::*PTRFunctionB)(void)#define REFISTERFUNPTRBP(className,parameterType) typedef bool (className::*PTRFunctionBP)(parameterType*)//Register.h//.原创 2021-07-31 16:24:54 · 281 阅读 · 0 评论 -
C++中继承与多态使用时的一些小细节总结
1、多态方法调用规则 虚函数,重写 1、、多态时不能调用子类特有的方法。可强转调用,是因为使用时是函数指针找到函数入口去执行的。父类没有这指针; 2、多态调用的方法基本都是子类的,如果子类没有重写则是调用父类的,这个于虚函数列表有关。 3、想调用父类父类方法则需要使用命名空间 非虚函数,重写 父类成员 测试案例//略2、父强转为子 编译时 使用时 父类指针引用指向子类对象(多态) 不报错 ...原创 2021-04-22 13:05:38 · 252 阅读 · 0 评论 -
C++构造函数体内初始化与列表初始化的区别
总结:1、列表初始化在构造函数之前 2、没有写初始化列表,则是调用成员的默认无参构造函数; 3、写了初始化列表,则是调用初始列表中显示的成员构造方法。注意事项: 1、如果成员中有的类型没有无参构造函数则必须使用列表初始化;因为不写列表的话会调用默认的无参构造函数; 2、初始化列表的初始化顺序与列表顺序无关,只与声明的顺序有关;参考链接https://blog.csdn.net/weixin...原创 2021-04-13 16:49:25 · 824 阅读 · 0 评论 -
#include和直接写class加类名的区别
看公司代码时发现有一个.h文件中写可好多class xxxa;class xxxb;class xxxc;假设B的定义是在B.h中,而存在下面这个文件://A.h--------------------------------------------classA{private: B*impl_;};--------------------------------------------//A.cpp------------------------...转载 2020-08-27 16:24:44 · 330 阅读 · 0 评论 -
2020-08-20C++面试
1、现在有一种三叉树,使用string格式书写成a(b(e,f,g,)),c,d(h,i,j));1.1、请写出合适的结构体保存它。1.2、请写一段代码,当用户使用以上格式输入时,将其存储为结构体变量。1.3、请写一段代码,将以上结构体变量按照题干中的方法打印出来。2、怎么用最快的速度如何判断链表是否有环? 在考官的提示下使用两个指针; 两个指针都是从头指针开始,速度不一样,如果有环,两个指针肯定会相遇。2.2 怎么计算环的长度。 3...原创 2020-08-20 20:24:27 · 95 阅读 · 0 评论 -
C++虚函数列表布局方式计算技巧
参考:陈皓大佬的C++ 对象的内存布局(上) 陈皓大佬的C++ 对象的内存布局(下)学习多态时产生了如下几个问题,都在陈皓大佬的文章里找到了答案1、父类中不是虚函数,子类中是虚函数;多态调用时为什么不能调用子类的函数?2、多层继承的内存布局是怎么样的?注:以下模型图中所有函数都是虚函数一、单一的一般继承计算方法:1、先Child继承Parent:将子类(Child)重写的方法覆盖父类(Parent),剩下的接到虚函数列表的最后面2、...原创 2020-07-02 21:16:23 · 166 阅读 · 0 评论 -
C++与Java访问权限对比
C++中的访问权限 private protected public 类的函数和友元函数 √ √ √ 子类的函数 × √ √ 类的对象 × × √ 继承后的可访问性private继承后,父类中的所有方法在子类中变成private。protected继承后,父类>=protected的所有方法(protected,public)在子类中变成protected。public继承后,父类方法的属性不变.原创 2020-06-30 22:28:28 · 236 阅读 · 0 评论 -
C++重载new与delete
总结: //重载的new操作符 依然会触发对象的构造函数 void * operator new(size_t size) { cout << "重载了new操作符" << endl; return malloc(size); } void *operator new[](size_t size) { cout << "重载了new[]操作符" << endl; return malloc(size); } //重载的原创 2020-06-30 17:12:57 · 208 阅读 · 0 评论 -
C++重载“=”操作符引起的思考
参考https://bbs.csdn.net/topics/396949997有一个类class MyArry在类的内部重载MyArry& MyArry::operator=(const MyArry& arry);但是1 MyArry arry1(10);//调用构造方法实例化对象2 MyArry arry2;//声明一个变量3 arry2 = arry1;//调用了重载的“=”4 MyArry arry3 = arry2;//调用了拷贝构造方法在第原创 2020-06-29 11:17:51 · 127 阅读 · 0 评论 -
C++中对象实例四种方法及其区别
MyArry(10).getLen();//在栈区定义使用有参定义一个对象,并调用getLen方法,执行完立刻析构; cout << "在栈区定义使用有参定义一个对象,并调用getLen方法" << endl; MyArry* arry0 = new MyArry(10);//new出来的空间只有使用delete时才会调用析构函数; MyArry arry1(10);//在栈区使用有参构造定义一个对象; MyArry arry2();//这是声明了一个新的函数 arry2.原创 2020-07-01 18:49:44 · 271 阅读 · 0 评论 -
C++析构函数调用时机
总结1、在匿名对象使用完后立刻调用析构函数2、在栈区的对象,空间被释放后立刻调用析构函数;3、在堆区的对象,空间被delete后调用析构函数;free不能调用;代码验证:1void test() {MyArry(10).getLen();//在栈区定义使用有参定义一个对象,并调用getLen方法,执行完立刻析构; cout << "在栈区定义使用有参定义一个对象,并调用getLen方法" << endl;}执行结果代码验证:2vo.原创 2020-06-28 18:03:40 · 2525 阅读 · 0 评论 -
C++函数中返回引用和对象的区别
本文参考了C++函数的返回值——返回引用类型&非引用类型要搞清楚这个问题我们必须要先搞清楚return的时候发生了什么?我们有一个类如下(不需要仔细看)#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string>using namespace std;static int i = 0;class Student{private: int age; string name;原创 2020-06-24 21:21:05 · 833 阅读 · 0 评论 -
c++ 方法加 const
const string getName() const;前边的const 说明返回的值不能被修改后边的const 说明该方法只能读取类中的变量,而不能修改类中的变量转载 2020-06-23 21:05:38 · 153 阅读 · 0 评论 -
C++中拷贝构造函数的四种调用方式
代码拿着跑一跑就什么都知道了#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string>using namespace std;static int i = 0;class Student{private: int age; string name;public: /* 构造函数 */ Student(int age, string name) { this->age.原创 2020-06-21 22:31:59 · 1945 阅读 · 1 评论 -
C/C++语言中结构体字节对齐方法详解
1、确定对齐字节数;int n;//#pragma pack(n) 中的nint maxTypeLent;//结构体中最大的数据类型长度;int pp = n<maxTypeLent?n:maxTypeLent;//对齐字节数对齐字节数就是设置的字节数与结构体中最大数据类型长度二者中较小的值;有以下一个结构体;求所占空间; typedef struct Stu { char a[4]; int b; double c; short d;...原创 2020-06-20 14:38:55 · 3450 阅读 · 5 评论 -
C/C++基本数据类型所占内存大小
16位机 32位机 64位机 char 1 1 1 short int 2 2 2 int 2 4 4 unsigned int 2 4 4 float 4 4 4 double 8 8 8 long 4 4 8 long long 8 8 8 unsigned long 4 4 8 指...原创 2020-06-12 18:58:34 · 205 阅读 · 0 评论 -
图解C/C++中什么情况下方法参数中需要指针,需要几级指针?
结论:当变量需要在被调函数中使用并修改,并且在主调函数中也体现修改时就需要指针;以链表的创建,遍历为例;主调函数如下://主调函数int test() { Stu *head = NULL; SlistCreat(&head);//创建链表 return 0;}遇见这种情况,那么被调函数只能是这样写了,因为要从NULL修改为某个值//创建单链表//做到手动输入id创建链表,当输入-1时取消int SlistCreat(Stu ** headP) { if (h原创 2020-06-08 13:27:12 · 678 阅读 · 0 评论 -
二级指针的三种内存模型图
1、char * p[] = {"111111111","000000000","bbbbbbbbb","aaaaaaaaa"}; 2、char ** buf = ...........3、char p[][4] = {............}原创 2020-06-02 20:38:07 · 217 阅读 · 0 评论 -
C语言中二级指针与二维数组的对应关系详解
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}总结先总结一下:对于上面定义的的二维数组,他们与指针有着这样的关系 等价于 解释 a int型二维数组 代表变量a的起始地址 a+i &a[i] 代表第i行起始地址 *(a+i) a[i] 第i行首元素的地址 *(a+i)+j &a[i][j] 第i行第j列元素的地址 *(*(a+i)+j) a[i][j]..原创 2020-06-02 20:30:26 · 985 阅读 · 0 评论 -
【转载】C语言含有指针的结构体写入文件中
#include <stdio.h>#include <string.h>#include <stdlib.h> typedef struct Student{ char *name; //名字 int id; int name_len; //名字长度}Stu; void write_file(){ FILE *fp = NULL;...转载 2020-03-05 15:50:52 · 944 阅读 · 0 评论 -
数组指针,指针数组
int *p[5];//int *p[5]则是一个大小为5且存放整型指针的数组。int (*p)[5];//数组指针的意思即为数组的指针,p先和*结合,说明了p是一个指针变量,//指向一个大小为5的数组。所以,int (*p)[5]即为一个数组指针。...原创 2020-03-05 15:11:55 · 73 阅读 · 0 评论 -
C语言const修饰指针
const 就近;const int * contper1 = malloc(100);int * const contper2 = malloc(100);第一个可以理解为 * contper1 被const修饰;就是指向的数据不能改;第二个可以理解为, const修饰了 contper2;就是指针不能变;地址不能变;...原创 2020-03-05 14:56:24 · 184 阅读 · 0 评论 -
C/C++在函数传参时究竟发生了什么?
无论是值传递,指针传递,引用传递其实都是发生了一次赋值而已;不同的在于传递的数据类型不同而已;首先分析“赋值”也就是 “=”的意义 我们分析下以下代码1 void test(){2 int a;3 int b =10;4 a = b;5 int c = b;6 } 在代码执行到方法内部的时候就为改方法内的所有局部变量分配了空间(Java则是执行到...原创 2020-03-05 14:13:18 · 187 阅读 · 0 评论 -
strcpy 与 用“ = ”直接赋值有什么区别
strcpy是深拷贝;=是浅拷贝;具体例子后面再补;原创 2020-01-12 23:55:38 · 4442 阅读 · 3 评论 -
(*p)++和*(p++)和*p++的区别
(*p)++和*(p++)和*p++的区别*(p++)究竟是谁++,是p的地址++,还是p所指的东西的地址++前缀递增递减和*优先级相同,从右到左;后缀递增递减比前缀优先级高,从左到右。比如 1 2 intarr[5]={1,3,5,7,9}; int*p=arr; *++p:p先自+,然后*p,最终...原创 2020-03-05 14:43:40 · 408 阅读 · 0 评论