《C++ Primer Plus第六版》 学习笔记-第一章&第二章

第一章:预备知识

C++三件法宝

  1. C++继承了C语言高效、简介、快速和可移植性的传统;
  2. C++面向对象(OOP)的特性带来一种全新的编程方法;
  3. C++模板特性提供另一种全新的编程方法——泛型编程;

C++简史

C语言

20世纪70年代早起,贝尔实验室的Dennis Ritchie 致力于开发UNIX操作系统。初始使用汇编这类的low-level语言进行编程,直接操作硬件。高级语言的诞生解决了低级语言的各种缺点,如效率等等,高级语言通过编译器(IDE)被编译为计算机内部二进制语言,这样,就可以在不同的平台上使用不同的编译器进行程序的二进制化。Ritchie希望有一种语言将低级语言的效率、硬件访问能力和该机语言的通用性、可移植性融合入在一起,于是C语言被开发出来。

C语言在早期和当时其他主流语言同样是过程性的(procedural),后来计算机科学家开发出一种更有序的编程方法——结构化编程(structured programming)。另一个新原则是自顶向下(top-down)的设计。
数据+算法=程序

OOP面向对象

虽然结构化编程理念提高程序的清晰度、可靠性,并且便于维护,但在编写大型程序时,仍然面临挑战,OOP提供一种新的方法,试图让语言来满足问题的要求,其理念是设计与问题的本质相对应的数据格式。

类是一种规范,它描述了新型的数据格式,对象是根据这种规范构造的特定数据结构。OOP的方法首先是设计类,但是不仅仅是数据和方法的合并,还包括其他一些方面,例如多态、信息隐藏、继承等。设计可靠、有用的类是一项艰巨的任务。

C++泛型编程

泛型编程(generic programming)是C++支持的另一种编程模式,
泛型是通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。

泛型的优点:
  1.可以做到最大的代码重用、保护类型的安全以及提高了程序运行的性能;
  2.可以创建集合类;
  3.可以创建自己的泛型接口、泛型方法、泛型类、泛型事件和泛型委托。
  4.可以对泛型类进行约束,以访问特定数据类型的方法。
  5.关于泛型数据类型中使用的类型的信息,可在运行时通过反射获取。

// generic programming
class Program
    {
        static void Main(string[] args)
        {
            int obj1 = 2;
            var task = new Task<int>(obj1);
            Console.WriteLine(task.obj);

            string obj2 = "这是个泛型";
            var task2 = new Task<string>(obj2);
            Console.WriteLine(task2.obj);
            Console.ReadKey();
        }
    }
    class Task<T>
    {
        public T obj;
        public Task(T t)
        {
            this.obj = t;
        }
    }

程序创建的步骤

源代码——编辑器——目标代码——链接程序(启动代码+库代码)——可执行代码

C++标准

C++11 & C++98
关于c++11的常用新特性,这篇博客里面有介绍C++11常用特性

第二章:初步使用

结构及main函数

  • #include 预处理器编译指令
  • using namespace 编译指令
  • 运行C++程序时,函数是从main开始执行
  • 函数头(作为接口) int main(){ },返回值为int型
  • 函数名main(形参列表arguement/parameter list)
  • 无参数:int main() 与int main(void) 是一致的,表示函数都不接受任何参数
  • void main() +省略renturn返回 :不返回任何值,但他不是当前标准强制的一个选项,所以在有的系统无法工作,应避免。

C++头文件新式类型: 无.h后缀与输入输出

iostream.h文件所定义的类和对象都是在全局空间中的,可以直接使用,然而iostream中的都是被放在了名称空间中,如果需要使用,则需要using namespace,然后可以直接使用cout。还有一种偷懒的方法,即using std::cout 这样也可以直接使用cout,不建议哈;
如果省略using namespace 命令,则需要在使用类的地方前面加上名字,例如std::cout;
(C语言中只有string特殊,问题在于C++要兼容C的标准库,而C的标准库里碰巧也已经有一个名字叫做“string.h”的头文件,包含一些常用的C字符串处理函数,比如strcmp。 这个头文件跟C++的string类没有关系,所以并非“升级版本”,他们是毫无关系的两个头文件。)
cmath: sqrt()

  • cout下 <<运算符的重载
  • std 中的endl控制符换行,旧式换行\n。使用情况:cout<<“How are you?\n”<<“I am fine !”<<endl; \n可以减少输入量。

C++语句

  • 变量的声明:声明了它的数据类型和变量名,保证在后续使用变量时不会因为拼写错误而出现问题(声明的原因)。
  • 赋值语句:从右到左

自定函数使用例子

#include <iostream>
#include <cmath>
void simon(int);  //声明自定函数 一个参数且为int型
int simon1(int);
int main(){
	int a;
	simon(3); 
	a = simon1(3);  //返回为int,a为int
	return 0;
}
void simon(int n)
{
.......
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章