Cpp4 类成员的访问控制

好的编程习惯 -定义和实现分开 代码会有更好的可读性 但不是必须的 在头文件中只留下声明代码 Test.h struct sclass { int x; int y; int Bigger(int x,int y); int Max(int x,int y,int z); }; Test.cpp int sclass::Bigger(int x,int y) { if(x>y) { return x; } else { return y; } } int sclass::Max(int x,int y,int z) { return Bigger(Bigger(x,y),z); } 使用: main.cpp #include "Test.h" #include #include int main(int argc,char* arhv[]) { sclass s; return 0; } 上面的实现方式没有问题,但是其实我们的Bigger函数是为了实现MAX函……

Continue reading

Cpp3 继承

什么是继承 struct Person { int age; int sex; }; struct Teacher { int age; int sex; int level; int classId; }; struct Teacher:Person { int level; int classId; }; 总结: 1、什么是继承? 继承就是数据的复制 2、为什么要用继承? 减少重复代码的编写 3、Person 称为父类或者基类 4、Teacher称为子类或者派生类 继承不仅仅局限于父类 struct X { int a; int b; }; struct Y:X { int c; int d; }; struct Z:Y //Z的成员……

Continue reading

Cpp2 构造函数和析构函数

什么是构造函数 #include "stdafx.h" #include struct Sclass { int a; int b; int c; int d; Sclass()//构造函数 { printf("观察这个函数 \n"); } Sclass(int a,int b,int c,int d)//构造函数 { this->a=a; this->b=b; this->c=c; this->d=d; printf("观察这个函数 2\n"); } int Plus() { return a+b+c+d; } }; int main(int argc, char* argv[]) { Sclass s; Sclass s2(1,2,3,4); return 0; } //反汇编: Sclass s; 0040D408 lea ecx,[ebp-10h] 0040D40B call @ILT+5(Sclass::Sclass) (0040100a) Sclass s2(1,2,3,4); 0040D770 push 4 0040D772 push 3 0040D774 push……

Continue reading

C语言23 终极篇 预处理之宏定义、条件编译和文件包含

什么是预处理 预处理一般是指在程序源代码被转换为二进制代码之前,由预处理器对程序源代码文本进行处理,处理后的结果再由编译器进一步编译。 预处理功能主要包括宏定义,文件包含,条件编译三部分 宏定义 简单宏: #define 标识符 字符序列 #define FALSE 0 #define NAME "LUODAOYI" #define __IN #define __OUT //极端例子 #define NAME "LUODAOYI" #define A int method() { #define B char buffer[0x10]; #define C strcpy(buffer,NAME); #define D return……

Continue reading

链表

实现思想 :通过指针把要元素串起来 简单结构图 struct Student { char name[10]; int score; } struct Node { Student Element; Node* next; } 每一个节点包含此节点信息和下一个节点的指针 有点:插入删除方便 缺点:查找麻烦 基本元素实现 //方法/函数 int InitList();//初始化链表 int IsEmpty(); //判断链表是否为空 空返回1 非空0 void Clear(Node* p); //清空链表 ini Find(int Index,Student* element); //……

Continue reading

Cpp1 封装和this指针

封装 C语言和C++语言的区别 C++是对C的补充扩展,C原有的语法C++都支持,并在此基础上扩展了一些新的语法: 继承、封装、多态、模板等等 结构体可以作为参数传递吗 struct Student { int a; int b; int c; int d; } //分析这个函数是如何传递参数的 int Plus(student s) { return s.a+s.b+s.c+s.d; } 23: Student s = {1,2,3,4}; 00401078 mov dword ptr [ebp-10h],1 0040107F mov dword ptr [ebp-0Ch],2 00401086 mov dword ptr [ebp-8],3 0040108D mov dword ptr [ebp-4],4……

Continue reading

C语言22 调用约定和函数指针

函数调用约定 就是告诉编译器:怎么传递参数,怎么传递返回值,怎么平衡堆栈 int method(int x,int y) { return x+y; } //调用 method(1,2); 常见的几种调用约定: 调用约定 参数压栈顺序 平衡堆栈 __cdecl 从右至左入栈 调用者清理栈 __stdcall 从右至左入栈 自身清理堆栈 __fastcall ECX/EDX 传送前两个,剩下:从右至左入栈 自身清理堆栈 int __stdcall method(int x,int y) { return x+y; } //调用 method(1,2); //观察反……

Continue reading

C语言21 指针数组与数组指针

指针数组的定义 char arr[10]; //10 char char* arr[10]; //10 指针(char*) Point* arr[10]; //10 指针(Point*) int******** arr[10]; 指针数组的赋值 char* a = "Hello"; char* b = "World"; //方式1: char* arr[2]= {a,b}; //方式2: char* arr[2]; arr[0]=a; arr[1]=b; 结构体指针数组 struct Point { int x; int y; } Point p; //8字节 一个结构体 Point arr[10]; //8字节 * 10 结构体数组 Point* arrPoint[10]; //4字节 * 10 结构体指针数组 分析下面的代码 int arr[] = {1,2,3,4,5,6,7,8,9,0};……

Continue reading

C语言20 结构体指针

探测结构体指针的特性 struct Point { int x; int y; } ++、– 加法与减法 指针相减 使用结构体指针 //创建结构体 Point p; p.x=10; p.y=20; //声明结构体指针 Point* ps; //为结构体指针赋值 ps = &p; //通过指针读取数据 printf("%d \n",ps->x); //通过指针修改数据 ps->y=100; printf("%d\n",ps=>y); 结构体指针一定要指向结构体吗? struct Point { int x; int y; } int arr[10]={1,2,3,4,5,6,7,8,9,10} Point* p = (Point*)arr; for(int i = 0;i < 5;i++,p++) { printf("%d %d\n",p->x,p->y); }……

Continue reading

C语言19 指针取值的两种方式

一级指针和多级指针 int i =100; int* p1 = &i; int** p2 = &p1; int*** p3 = &p2; int**** p4 = &p3; int***** p5 = &p4 int****** p6 = &p5; int******* p7 = &p6; int****** px1 = *(p7); int***** px2 = *(px1); int**** px3 = *(px2); int*** px4 = *(px3); int** px5 = *(px4); int* px6 = *(px5); int px7 = *(px6); int px7 = *(*(*(*(*(*(*(p7))))))); *()与[]的互换表示 int* p = (int*)1; printf("%d %d \n",p[0],*p); //p[0] = *(p+0) = *p int** p = (int**)1; printf("%d %d \n",p[0][0],**p); printf("%d %d \n",p[1][2],*(*(p+1)+2)); int*** p = (int***)1; printf("%d %d \n",p[1][2][3],*(*(*(p+1)+2)+3)); 同理: *(*(*(*(*(*(*(p7)))))))) = *(*(*(*(*(*(p7+0)+0)+0)+0)+0)+0) = p7[0][0][0][0][0][0][0] 总结 *(p+i) = p[i] *(*(p+i)+k) = p[i][k] *(*(*(p+i)+k)+m) = p[i][k][m] *(*(*(*(*(p+i)+k)+m)+w)+t) = p[i][k][m][w][t] *() 与 []可以……

Continue reading