《C++编程思想》笔记
Volume 1
第一章 对象导言
OOP ObjectOriented Programming 面对对象编程
UML Unified Model Language 统一建模语言
堆(stack)和栈(heap)
预备知识—程序的内存分配
一个由C/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
4、文字常量区 —常量字符串就是放在这里的。程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码
堆和栈的区别可以用如下的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。
第二章 对象的创建与使用
语言的翻译过程-解释器-编译器
头文件包含
C++中新定义的方法都是有名字空间的 比如cout就属于std名字空间 如果include头文件的时候加上.h,默认会usingnamespace 否则需要自己加上 using namespace XXX 对于C中已经定义的方法如printf,没有影响的
iostream.h是包含输入/输出流处理的头文件,iostream就什么都不是了
但用iostream要加名词空间namespace
#include<iostream.h> 或者是 #include<iostream> using namespace std; 二者都行
#include<iostream.h>是C语言中比较通用的
#include<iostream> using namespace std; 是C++中比较通用的
#include<cstdio>和#include<stdio.h>与上文同理
关于输入输出流:cout<<hex (dec &oct)<< 15 ;可以按照预定的进制改变输入和输出流的状态 。
文件的读写:
#include<fstream>
#include<string>
usingnamespacestd;
intmain()
{
ifstream in("Scopy1.txt"); //如果文件不存在不会自己创建
ofstreamout("Scopy2.txt"); //文件不存在会自己创建
strings;
while (getline(in, s)) //一次获得一行的字符从in->s
{
out<<s<<"\n";
}
return 0;
}
第三章 C++中的C
Switch case中可以用break,不能用continue;
Break和continue只能用于循环语句中,用于加速中循环。
goto谨慎使用,建议只在跳出多层循环的地方使用。
Loop:**************
goto Loop;
C++中的引用:
以引用传递允许一个函数去修改外部对象,就像传递一个指针所做的那样。
#include<iostream>
usingnamespacestd;
voidfunction(int &r)
{
cout<<"r="<<r<<endl;
cout<<"&r="<< &r<<endl;
r = 5;
cout<<"r="<<r<<endl;
cout<<"&r="<< &r<<endl;
}
intmain()
{
intx = 1;
cout<<"x="<<x<<endl;
cout<<"&x="<< &x<<endl;
function(x);
cout<<"x="<<x<<endl;
cout<<"&x="<< &x<<endl;
cin>>x;
return 0;
}
void*类型的指针:(不建议常用void*类型的指针,void类型的引用更是禁止使用)
它意味着任何类型都可以间接引用那个指针,一旦间接引用了void*类型的指针,就意味丢失了原来的类型信息,所以使用时一定要(强制)类型转换为使用类型。
<