再看C、C++、数据结构(二)
上一篇写了关于C的一些我认为比较晦涩的问题,从这篇开始讲讲C++与C 的不同,当然这只是鄙人的一些见解,随着学习过程会不断更新,若有错误或见解请指教。C++本质上是用户可以设计并扩展自己的数据类型,这也就是面向对象的本质,对于C只有固定的那么几个简单类型和几个简单的复合类型(如数组、指针),那么C++可以自己拓展,也就是类.
1、对于头文件
C的传统是使用h作为后缀名作为头文件,开始C++也是一样的,但是现在的C++摒弃了这种使用方法,C++文件不采用后缀名,如你经常会看到#include <iostream> ,其实就是iostream文件,而有些C文件被转换为C++文件,则就成为前面加个字母C 如math.h文件,在C++中就是CMath。
2、名称空间
对于写过.net的人知道名空间(namespace)是一个很好的东西,它对于你组件的组织可以使很有层次性,如ESRI公司写了个Map类,而SuperMap公司也写了类Map,那么怎么区分这两者呢,就可以通过使他们被组织在不同的名空间下,这是在C中没有的特性。
3、输入输出
在C++中输入输出是可以使用C 中输入输出方式,在这里总结一下C的输入输出方式吧:
1、printf() 格式输出函数
2、puts() 输出字符串函数
3、scanf() 格式输入函数
4、gets() 输入字符串函数
5、getch() 输入一个字符
6、putch() 输出一个字符
在我脑海里就怎么多了,下面写个小程序全部使用一下吧,这里要注意scanf,其遇到空格结束一个数据段的截取,注意是数据段, 回车也一样,但是这个字符还是会作为下一个流的第一个字符,gets()是遇到回车符结束,因此其可以包括空格而scanf则不可以,因此一般不会这样像下面这样混用。getch()是得到字符,但是其不会显示,通过putch()显示,所以就只能看到你输入的那个字符。
int main()
{
char *strs1,*strs2,c;
scanf("%s",strs1);
printf("%s\n",strs1);
gets(strs2);
puts(strs2);
c=getch();
putch(c);
getch();
return 0;
}
对于上述这些输入输出方式在C++中也是同样可以的,但毕竟C++是面向对象的语言,因此其构造了两个对象cout、cin可以用来使用输入输出,这里cin同样也要注意scanf()所具有同样的问题,就是使用空格、制表符和换行符作为字符串的边界,一次只能输入一个单词。那么在C++中读入一行字符应该使用cin.getline、cin.get,在这里我想简单介绍一下
1)cin.getline(。。,。。)
其有两个参数,一个参数用来存储输入的字符,第二个用于描述要读取的字符数,遇到换行符停止读取,但不保存换行符,并在字符串结尾加上'\0'字符,因此可以理解为用'\0'代替换行符。
2)cin.get(..,..)
其也是两个参数,但是其遇到换行符只是停止读取字符,并不将换行符读取出来,那么如果你要再继续读下去,可以使用cin.get()这个无参的函数重载。下面是一段小代码可以参考一下
4、对于函数返回值方法
在C中函数如果没有指定函数返回值则默认是返回int型的,且最后如果没有return 一个值,则编译器会自动在结尾加上这一句。而在C++中不会是这样,函数必须有返回值,即使没有也要指定void .
5、const限定符
就是指定一个名称其值是固定不变的,于#define的意思基本是一致的,不过比#define要好,
1、它可以指定类型
2、它可以限定作用域。
在Ansi C中引用了这一特性,也可以使用const特性。
6、字符串
在C++中使用C风格字符串完全是可以的(其介绍在上一篇了做了个简单介绍),不过ISO/Ansi C++实现了String,类,我们可以使用它 .
1、对于头文件
C的传统是使用h作为后缀名作为头文件,开始C++也是一样的,但是现在的C++摒弃了这种使用方法,C++文件不采用后缀名,如你经常会看到#include <iostream> ,其实就是iostream文件,而有些C文件被转换为C++文件,则就成为前面加个字母C 如math.h文件,在C++中就是CMath。
2、名称空间
对于写过.net的人知道名空间(namespace)是一个很好的东西,它对于你组件的组织可以使很有层次性,如ESRI公司写了个Map类,而SuperMap公司也写了类Map,那么怎么区分这两者呢,就可以通过使他们被组织在不同的名空间下,这是在C中没有的特性。
3、输入输出
在C++中输入输出是可以使用C 中输入输出方式,在这里总结一下C的输入输出方式吧:
1、printf() 格式输出函数
2、puts() 输出字符串函数
3、scanf() 格式输入函数
4、gets() 输入字符串函数
5、getch() 输入一个字符
6、putch() 输出一个字符
在我脑海里就怎么多了,下面写个小程序全部使用一下吧,这里要注意scanf,其遇到空格结束一个数据段的截取,注意是数据段, 回车也一样,但是这个字符还是会作为下一个流的第一个字符,gets()是遇到回车符结束,因此其可以包括空格而scanf则不可以,因此一般不会这样像下面这样混用。getch()是得到字符,但是其不会显示,通过putch()显示,所以就只能看到你输入的那个字符。













1)cin.getline(。。,。。)
其有两个参数,一个参数用来存储输入的字符,第二个用于描述要读取的字符数,遇到换行符停止读取,但不保存换行符,并在字符串结尾加上'\0'字符,因此可以理解为用'\0'代替换行符。
2)cin.get(..,..)
其也是两个参数,但是其遇到换行符只是停止读取字符,并不将换行符读取出来,那么如果你要再继续读下去,可以使用cin.get()这个无参的函数重载。下面是一段小代码可以参考一下
1
#include <iostream>
2
#include <climits>
3
using namespace std;
4
int main()
5
{
6
char name[20],subject[20];
7
cout << "What is your name:";
8
cin.get(name,20);
9
cout << "What is your favourite subject:";
//为了突出这里我使用多个cin.get()来对比显示出其作用
10
cin.get(subject,20); cin.get(subject,20); cin.get(subject,20);
11
cout<< name << endl<<subject<<endl;
12
return 0;
13
}
14

2

3

4

5

6

7

8

9

//为了突出这里我使用多个cin.get()来对比显示出其作用
10

11

12

13

14

4、对于函数返回值方法
在C中函数如果没有指定函数返回值则默认是返回int型的,且最后如果没有return 一个值,则编译器会自动在结尾加上这一句。而在C++中不会是这样,函数必须有返回值,即使没有也要指定void .
5、const限定符
就是指定一个名称其值是固定不变的,于#define的意思基本是一致的,不过比#define要好,
1、它可以指定类型
2、它可以限定作用域。
在Ansi C中引用了这一特性,也可以使用const特性。
6、字符串
在C++中使用C风格字符串完全是可以的(其介绍在上一篇了做了个简单介绍),不过ISO/Ansi C++实现了String,类,我们可以使用它 .
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 为什么构造函数需要尽可能的简单
· 探秘 MySQL 索引底层原理,解锁数据库优化的关键密码(下)
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 短信接口被刷爆:我用Nginx临时止血
· 面试官:如果某个业务量突然提升100倍QPS你会怎么做?
· .NET 平台上的开源模型训练与推理进展
· 聊聊智商税:AI知识库