才开始学习c++
太深奥太技术的博客内容也写不出来
决定就目前学到的内容、概括一下与c语言的相似或不同之处
- 语言类型
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
最早听学算法的同学表示,c++里有一些功能,譬如类和容器,更能针对算法题里的一些问题,用起来也更方便、移植性强。
此外,c++作为一门面向对象的语言,更抽象、更概括,封装技术也使程序更灵活,容易扩展。这段是听学姐讲的
- 输入输出
c语言的输入输出是依靠scanf()和printf()语句实现的,在输出中用%s/%d/%f等占位符实现混合输出,而c++好像不行。
c++的输入输出使用一种“流”的方式,意为内容随时间顺序而生成或消耗。譬如书上习题1.11中:
while(s<=e)
{
std::cout<<s<<",";
s++;
}
std::cout<<"\nover"<<std::endl;
while()语句每次循环时,都会将当下s的值传入cout
,和最后的"\nover"
一同,等待std::endl
语句,才能一次性输出。感觉这种形式,很像队列的思路。
此处的操作是,cout将消息填入内存的缓冲区中,而endl则结束当前行,减肥缓冲区的所有内容刷入设备。
此外,c++中没有%d
等占位符,复杂语句的内容要多次用<<
实现,没法做到真正意义上的混合输出。
c语言里,通过改变占位符而实现的格式化输出,在c++中的具体表现为
std::cout << dec << a <<" " //十进制
<< oct << a << " " //八进制
<< hex << a <<std::endl; //十六进制
-
类
c++引入了“类”这一数据类型。我们常说的“面向对象"中的对象的集合即为类。
譬如书中最初提及的Sales_item类,虽然是被额外定义的数据类型,但是在程序中可以和那些基本内置类型(如int,float)一样,直接进行操作。
当你定义一个类时,你需要定义可以对这个类进行的所有操作。根据你的定义,加上不同的运算组合,程序才能实现多种多样的功能。这也是c++语言强移植性的根本保证。
此外,c++的数据类型和c也不尽相同。新引入了bool 和 wchar_t 等类型。 -
初始化
与c语言不同,c++定义了多种初始化的形式。为了信息的安全和准确,书上推荐使用带有花括号的初始化语句,如
long double ld = 3.145926536;
int a{ld}, b = {ld};
因为会造成数据信息丢失,这样的语句在编译时就会报错。
-
声明、定义与作用域
这个也是一开始就会发现的、和c语言不同的地方。如输入输出时的std::cin
和std:cout
就很典型,是指此处提到的名字“cin”“cout”是定义在命名空间“std”中的。
*注意:全局作用域一般没有名字,调用其中的参数或函数时,直接作用域运算符::
加变量名即可。这在嵌套多层函数时会用到。 -
引用
这是实实在在的c++的迷惑点。
int ival = 1;
inr &refVal = ival;
refVal = 2;
此时,ival 的值也会变成2。
引用 是一个起别名的操作。你可以通过本名或新的别名去调用这个存储空间。
引用 必须附在某个同类型对象上,引用不是对象。
后续的复合类型中,有*和&符号的混用现象,要注意辨别真实意味。
int i = 1;
int *r = &i;
int *p;
p = &i;
*p = i;
int &r2 = *p;
- 其他
强制类型转换有两种形式
long int a = 329;
int b = (int) a;
//或者
int b = int (a);
不过没什么区别就是啦~
内存操作
除了malloc()和free()以外,还有new()和delete()来分配、释放内存。