C++ 学习笔记(一)
出于个人兴趣原因用业余时间看一点C++,作此笔记作为备忘,此次只是粗略观察,将来认真学习是再仔细研究 。 随意在网上下了一本《[高级语言Cpp程序设计].刘璟.文字版.pdf》,就以这本书为基准开始吧。作为一个有 Java 和 C# 开发经验又了解一些 C 的人,我也将着重从这几种语言的之间的相同和不同下手尽快对C++有一个粗浅的了解,希望可以抛砖引玉得到高手指点。
闲言少叙,书归正传。
第一章. 绪论
某年某月某日由于某种原因产生了C++,由于N+1个原因我们要使用和学习C++,本书将如何如何讲解。。。。。。。。。。。。。。。。
第二章. C++语言初步
Hello C++!
在开头的 #include 与伟大的 C 一样,注释,函数定义,变量定义之类的也与各种主流语言基本相同。首先要注意的就是发现在 VS 2010 中 #include 之后还要“using namespace std;”不然它是认不到 cout cin 的。 不是 printf() 不是 Console.Write() 也不是 System.out.printl(), C++的控制台IO并没有使用函数(虽然也可以使用)而是使用了 IO 流的方法世所罕见,不过呢也无所谓了,除了一些test和一些hello world还有多少人会用控制台呢。
在C++中的标示符命名规则,int、char、flout···都和C大同小异,但是C++有bool型而C没有,与Java中的boolean 不同的是,在C++中bool即接受true、false也接受int。既:bool b=true ; 和 bool b= 0 ;都是对的(0等价于false,非0等价于true)。
C++ 执行从主函数开始结束,主函数如同C一样赤裸,不像C#和Java一样被包装在一个类内部。
作为一种半生不熟的面向对象语言,C++在可以面向对象的同时也可以面向过程,而这种特性也是我最讨厌C++的地方,一个函数或变量可以脱离类,脱离命名空间存在,而一个类既可以写在命名空间内又可以在命名空间以外。你既要include文件 又要 useing namespace ,还有全局定义的 #define,函数的声明在类内部却可以跑到类外部去实现。你还要小心的注意到类 函数 变量的声明顺序,由于编译是类似C一样顺序进行的,理论上所有的一切都要在main之前被声明,如果你想在main内使用一个类,那么请把这个类所有的代码写在main前面,不然编译器是不会放过你的。
总之,C++ 给我的感觉是 不能承受之乱 !
第三章. 基本数据类型与基本运算
C++语言中类型的划分: 基本类型 int、float、double、char、bool、void;派生类型 (修饰符+基本类型);完全由用户定义 class,(struct,union);部分由用户定义enum(int 类型的子集); 由其他类型导出 array、struct、pointer、reference常量在程序执行过程中值不变(声明方式:const int a =1; 或 #define a 1),变量可能改变(声明:volatile int a;a=1;a=2....//volatile 可以不要)。
变量存贮类型 auto register static extern 与C相同。
变量的生存周期是各种笔试题考点了,鄙人也被考过N次了,这里提供一个简单得方法,看“{}”变量的作用范围在包含它的最小的“{}”内部,如果在这对大括号下还有括号只要看这个低一级的括号内有无同名变量,没有的话仍是作用域,有的话排除这个括号的部分,不需要关心括号的来源,不论是 函数 namespace class if..elsetry..catch 还是自己随便加的都无所谓了,只看括号(或者说程序段)就好了。
例{//作用域从这开始
int a;
{ //这一块包含
{//这一块包含}
}
{ // 这一块被排除
int a;
}
}//作用域到这里结束
C++命名空间可以直接定义变量 Java C#不行。
可用 typedef <已定义类型名> <新类型名> 用法与C一致 但如果你想做一个OOP程序员的话不建议这样使用。还是要老老实实的 Class
运算符,运算,之类的与其他语言一样,不重复了。
第四章. 基本控制结构与导出数据类型
程序控制语句 if else、switch case 、do while、while、for 没啥说的。
continue 跳出当前循环,break 结束循环。
在C++语言中,导出类型主要有3 种,即:
(1)数组类型:若干同一种类型数据(或对象)的组合。
(2)指针类型:某一种类型数据(或对象)的首地址。// 同C
(3)引用类型:某一种类型数据(或对象)的引用。 // 就是类