C++

面向对象的程序设计语言倾向于对象一定要经过初始化后,使用起来才比较安全

C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。

初学者常因“构造函数”这个名称而认为构造函数负责为对象分配内存空间,其实并非如此。构造函数执行时,对象的内存空间已经分配好了,构造函数的作用是初始化这片空间。

只有这一个功能,构造函数没有原型链, 该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作

Complex cl;    Complex c2(2)   这两个的用法    决定了是否是默认的构造函数呢     一个是默认的一个是有参的   如果是默认的那么有参的报错  如果自定义了有参的那么默认的报错

C++ 规定,任何对象生成时都一定会调用构造闲数进行初始化。

构造函数是可以重载的,即可以写多个构造函数,它们的参数表不同。当编译到能生成对象的语句时,编译器会根据这条语句所提供的参数信息决定该调用哪个构造函数。如果没有提供参数信息,编译器就认为应该调用无参构造函数。

CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。

c = a + b;  等同于  0X3000 = (0X1000) + (0X2000);   但是计算机值认后面的   所以要编译   前面的产生后面的     如果是直接用后面的来写   就嘿嘿了

关于递归函数的算法    totel=function(初始的变量    运算符递     归的变量)     运算符       跟给出的条件的变量

 int i=sizeof(arr)/sizeof(int)//这时的"i"就是数组的长度

/*sizeof()函数能求出数组的字节数,然后再除以相应的数组类型所占的字节数就能得出数组长度*/
当参数传值的时候会退化为指针     当参数的话拿不到数组的长度
这时可以使用函数的调用的方式   在主函数中算出数组的长度之后  使用长度调用自定义的函数   可以使用数组参数的方式  也可以使用指针参数的方式
 
 

if (arr[j]>arr[j+1]) //当前面的数比后面的数大时
{
double temp; //定义临时变量temp
temp = arr[j]; //将前面的数赋值给temp
arr[j] = arr[j+1]; //前后之数颠倒位置
arr[j+1] = temp; //将较大的数放在后面

 

对角线有主对角线和次对角线,主对角线是 ( i == j ),次对角线是 ( i + j == 矩阵维度 - 1 ),本例中次对角线是 ( i + j == 2 )。

 

for ( i = MAX; i > 0; i--)循环递减

 

指针连

当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。int **var;

 当一个目标值被一个指针间接指向到另一个指针时,访问这个值需要使用两个星号运算符 

p+i与&array[i]是等价的,而*(p+i)与array[i]是等价的      一个是地址的编码  一个是变量的值     都是代表的相同的鬼东西

 

结构体

结构体是一种特殊的类  他没有构造和析构函数   他是public  类是provate  

dypedef是一种更简单的定义结构的方式

struct stu stu1, stu2;   可以是结构体数组,结构体指针,结构体数组指针,结构体指针作为函数参数     
也可以不写名字
  1. struct{ //没有写 stu
  2. char *name; //姓名
  3. int num; //学号
  4. int age; //年龄
  5. char group; //所在学习小组
  6. float score; //成绩
  7. } stu1, stu2;

->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->C语言中的唯一用途。

 

最基本的读写操作

FILE *fp;
fp = fopen("E://tmp/dome.txt", "w+");
fputs("业务能力不熟悉!", fp);            fputs是写入的操作  对应后面的w+   fgets是读取操作   后面看是否要输出到终端

char *fgets( char *buf, int n, FILE *fp );  读取

fgets(buff, 255, (FILE*)fp); printf("2: %s\n", buff );  读取+输出在终端

您也可以使用 int fscanf(FILE *fp, const char *format, ...) 函数来从文件中读取字符串,但是在遇到第一个空格字符时,它会停止读取。fscanf(fp, "%s", buff);

 

C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。

A simple practice in C 或 C++ 程序中,建议把所有的常量、宏、系统全局变量和函数原型写在头文件中,在需要的时候随时引用这些头文件。

-l 是默认的下拉选项快捷键

 

头文件和宏的用法

 

强制类型转换  (double)     使用ascii码来的

 

递归  fibonaci(i-1)+fibonaci(i-2)     i*fibonaci(i-1)

 

free(description);释放内存

 

使用初始化成员列表对对象进行初始化,有时是必须的,有时是出于提高效率的考虑     

c++后初始化的机制,使引用和常量数据成员变为可能的,Student类的构造函数应为:  student ::student(int i,int j):a(i),b(j){}      就是给a和b赋值

 

c++没有垃圾回收机制  但是他有析构函数  分为自动释放内存和根据变量的作用域离开之后释放内存    这个作用域的离开和js里面的垃圾回收差不多的    但是js里面是标记变量的进入和离开的环境

当变量进入执行环境(函数中声明变量)的时候,垃圾回收器将其标记为“进入环境”,当变量离开环境的时候(函数执行结束)将其标记为“离开环境”,在离开环境之后还有的变量则是需要被删除的变量

 

 

 

posted @ 2019-05-21 20:19  菩萨低眉  阅读(178)  评论(0编辑  收藏  举报