c++学习笔记

2018-06-17 21:40:59来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

声明:我的c++笔记是建立在王桂林老师的视频和书籍的基础上的,我觉得这可能是中国最好的c++教学。我已经得到王老师的许可,推荐大家去看看,腾讯课堂网址https://ke.qq.com/course/115806这个笔记很大一部分是为了给自己看,当然希望大家不吝啬你们的想法思路,多多指教。
c++顾名思义 ++意味着c++是建立在c的基础上的,c++原来叫做 c with class 带类的c。按照惯例 "Hello Word"走起

c++

1 #include <iostream>
2 
3 using namespace std;
4 
5 int main(int argc, char *argv[])
6 {
7     cout << "Hello World!" << endl;
8     return 0;
9 }

作为对比c

1 #include <stdio.h>
2 
3 int main(int argc, char *argv[])
4 {
5     printf("Hello World!\n");
6     return 0;
7 }

看起来基本结构很相似,我所接触的程序语言无论是python matlab c  几乎都是从数据类型开始的,c++也不例外。毕竟编程语言就是处理数据的工具,最终还是要回归到人上。类型增强

真正的const

c语言中 const  修饰变量的时候 变量会变成一个常量 但是这是绝对的吗?c语言最大的特点就是自由,指针是C语言的灵魂,不多说上程序,不过我们首先得回顾一下 const 是怎么修饰变量的

 1 #include <stdio.h>
 2 
 3 int main(int argc, char *argv[])
 4 {
 5 
 6    const int a=1;//const 修饰 a  等价于 int const a=1;
 7    const int *b=0;//const 修饰*b  等价于 int const *b=1;
 8     const int * const p=2;// const 修饰 *p  和p  指针和指针所指的变量都不能改变
 9    return 0;
10 }

 方法:去掉类型看const修饰什么

c语言中的const

1 #include <stdio.h>
2 int main(int argc, char *argv[])
3 {
4     const int a=1;
5     int *p=&a;
6     *p=1024;//明修栈道 暗度陈仓
7     printf("%d\n",a);
8     return 0;
9 }

可以看出c语言的const并不严格 const int *类型赋值给了int * 可以通过指针间接访问变量

c++中的const

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int main(int argc, char *argv[])
 6 {
 7     const int a=100;//c++中const变量只能在定义时赋值
 8     int *p=&a;//无法从const int * 转换为int *
 9     cout <<a << endl;
10     return 0;
11 }

编译结果:

第一行是警告应该是中文编码问题,忽略它,主要看第二行,可以看出c++中const变量是真正的无法修改,类型检查比较严格,并且c++中const 变量只能在定义的时候赋值,c语言可以不复制,c++的严谨凸显无疑。

再来体会一下两者的差别

 1 #include <stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 int main(int argc, char *argv[])
 5 {
 6     int arr[2][3];
 7     char *p="hello c++";
 8     char *q=malloc(strlen(p)+1);//void * 转换为 char*不过推荐大家加上强转
 9     strcpy(q,p);
10     printf("%s\n",q);
11     free(q);
12     int **a=arr;//const int * 数组名是const的指针变量 赋值给指向指针的指针
13     return 0;
14 }

c++中

 1 #include <iostream>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 using namespace std;
 5 
 6 int main(int argc, char *argv[])
 7 {
 8     int arr[2][3];
 9     char p[]="hello c++";
10     char *q=malloc(strlen(p)+1);//void * 转换为 char*不过推荐大家加上强转
11     strcpy(q,p);
12     cout<<q<<endl;
13     free(q);
14     int **a=arr;//const int * 数组名是const的指针变量 赋值给指向指针的指针
15     return 0;
16 }

运行结果:

c++相对于c比较严谨 新增逻辑类型bool(c99也有这种类型,不过我是以标准c来比较的)

在c语言中0为假非零为真 c++新建了逻辑类型bool来表示  不多说上代码

 1 #include <stdio.h>
 2 
 3 int main(int argc, char *argv[])
 4 {
 5 
 6    if(1)
 7    {
 8        printf("ture");
 9 }
10 else{
11        printf("flase");
12    }
13    return 0;
14 }

c++

 1 #include <iostream>
 2 using namespace std;
 3 int main() {
 4  bool flag = true;
 5     if(flag)
 6         printf("flag is true\n");
 7     else
 8         printf("flag is flase\n");
 9 
10     printf("sizeof(flag) = %d sizeof(bool) = %d\n", sizeof(flag),sizeof(bool));
11 
12     flag = 2000;
13     printf("flag = %d\n",flag);
14     return 0;
15 }

引用王老师的话“c 语言的逻辑真假用 0 和非 0 来表示。而 C++中有了具体的类型,但其本质,仍是 一个 char 类型的变量可被 0 和非 0 的数据赋值。”虽然能被赋值但是用printf输出后还是1比如bool类型被赋值但是printf后还是逻辑值1,觉得这个设定有点奇怪。

bool类型的本质(枚举类型)

#include <stdio.h>
enum BOOL
{FLASE,TRUE};
int main(int argc, char *argv[])
{
    enum BOOL flag=TRUE;//用枚举变量创建逻辑类型
    if(flag)
    printf("true\n");
    else
    printf("flase\n");
    flag=100;//C语言中枚举不严格
    return 0;
}

可以看出bool类型本质上就是一种枚举,不过C语言中的枚举并不严格,那么首先枚举是什么?

百度百科:在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。[1]  是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。

王老师的枚举:c 语言中枚举本质就是整型,枚举变量可以用任意整型赋值。而 C++中枚举变量, 只能用被枚举出来的元素初始化。枚举的常被用来取代宏常量。

我所理解的枚举就是列出所有可能的数据集合,枚举变量必须在其中选择。由于枚举变量定义的时候集合里面的数据被赋值,所以副作用可以用来替代宏常量。

c++的枚举

 1 #include <iostream>
 2 
 3 using namespace std;
 4 enum day
 5 {SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY};
 6 int main(int argc, char *argv[])
 7 {
 8     day today=SUNDAY;
 9     today=100;
10     cout << today<< endl;
11     return 0;
12 }

运行结果:

c++是真正意义上的枚举,枚举变量不能被赋值任意整型。
总结:从整体上看c++比c严谨,c比c++自由。
扯蛋时间:我喜欢c++的bool,枚举,但是我也喜欢c的const,自由就是自律,相对的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Brush (IV) LightOJ - 1018

下一篇:Computer HDU - 2196