//随时更新
Chapter 2
对象是类的特定实例,而类定义了数据的存储和使用方式。
#include<iostream>
int main()
{
using namespace std; //编译指令——名称空间(namespace)支持:不同厂商的产品,如microflop::danda()和Pissine::wanda()
cout << "come up and c++ me some time";
cout << endl; //start a new line
cout << "you wont regret it" <<endl; //cout函数
cin.get();
return 0;
}
1.名称空间
using namespace std;
编译指令——名称空间(namespace)支持:不同厂商的产品,如microflop::danda()和Pissine::wanda()。该指令写在函数中,则只作用于该函数。
Std是一个名称空间,其中放置了类,函数和变量。这样,cout其实是std::cout;endl其实是std::endl。istream和ostream是两个类。
Using类似一个声明,这样的话,用到哪个名称空间的函数,可以仅声明这个,如using std::cin。注意到std::cin并不是一个名称空间,因此不用namespace。
2.<<插入运算符
<<表示信息流动的路径。cout << "you wont regret it" <<endl将"youwont regret it"和endl传给了cout函数。
Cout可以理解为一个对象,通过它的接口便可以使用它。
3.运算符重载
C中已经存在运算符重载的例子了,所以很好理解。比如*表示乘或者指针解除。
4.控制符(manipulator) endl
特殊的符号,表示:重启一行。和“ ”等效。
5.定义变量
变量使用前声明即可。
6.类
类是用户定义的一种数据类型。类之于对象就好像类型之于变量。所有演员是一个类,是一个数据类型;***就是该类型的数据,是一个对象,是一个实体。类中不仅包含演员,还包含演员的动作。
7.c++6种语句:
Chapter 3
1.变量命名原则
有一点比较重要:以“两个下划线”或“下划线和大写字母”开头的名称被保留给实现。
2.sizeof运算符
包含在<climits>里。
3C11中初始化变量的新方法
{}初始化:int a={24}或int a{24}或int a{}则初始化为a=0.
4.注意整型的溢出行为。
5.cout.put函数显示单字符:类似于putchar.
Cin和cout有智能对象的功能,按变量输出。
6.char默认下既没有符号,也不是有符号。需要定义时说明。
7.const的使用:定义符号常量时可以明确变量类型,比#define更好,且能明确作用域。
8.数据类型转换
强制类型转换:(typename)value或者typename(value)
Chapter4
1.声明数组
Typename arrayname[];
Typename arrayname[]={*,*,……,*,*};
2.字符串
包含 的数组。
3.字符串的处理函数包含在<cstring>中,即C中的string.h
Strlen长度+1为数组长度(算上 )。
getline:面向行的输入,丢弃换行符;cin.getline(name,19);
get():面向行的输入,不丢弃换行符;cin.get(name,19);
4.string类
通过std::string来使用。用变量来存储字符串.
定义为:string str1;
添加<string>
操作有:赋值=,拼接+,附加+=。
5.struct
Struct 类型名{
^……
^……
};
定义:类型名 变量名
成员访问:变量名.成员名
结构声明的位置(很重要):局部声明和外部声明。
如何传递和返回结构,在chapter7
6.结构中的位字段(了解即可,可以用位操作代替)
7.共用体(union)
Union 类型名{
……
……
……
};
一次只能存储一个数据类型,int,double,或long。节省内存。
8.枚举
Enum 类型名 {a,b,c,d,e,f,g};
这样,该类型名则为一个枚举。a,b,c,d,e,f,g为符号常量,对应0~6.
9.指针
一定要在*之前,将指针初始化为一个确切的、适当的地址。如下有错误:
Long *fellow;
*fellow=213213;
注:这样写就没问题了。
int *pt =new int;
*pt = 1000;
10.使用new分配内存。
为一个数据对象(结构和数据类型)获得分配内存的格式:typename *pointer_name= new typename.
用完内存要删:delete
int *pt =new int;
*pt = 1000;
Delete pt;
11.使用new创建动态数组
动态联编(dynamic binding)
格式:typename *pointname= new type_name[elementnumber]
Delete []pointname.
使用时直接用指针名当数组名使用即可:pointname[n]。
Chapter5
1.基于范围的for循环
Double price[5] = {1,2,3,4,5};
For(double x:price)
2.文件尾条件
Chapter7&8
1.函数中使用数组(指针):当且仅当用于函数头或函数原型时,int *arr等于int arr[]。
2.内联函数:
应将c中的宏定义的函数功能用内联实现。格式为:
Inline 函数()
程序很短时才能使用内联函数。
3.引用:变量别名 int&接近 int*
int rats;
int &rodents = rats;
必须在声明引用变量时进行初始化。
4.函数的引用参数
中参数为(&a)引用时,修改a就是修改x:
#include<iostream>
#include<string>
double cube(double a);
double refcube(double &ra);
int main()
{
using namespace std; //编译指令——名称空间(namespace)支持:不同厂商的产品,如microflop::danda()和Pissine::wanda()
double x =3.0;
cout <<cube(x)<< " = the cube of "<<x<<endl; //starta new line
cout <<refcube(x) << " = the cube of" <<x << endl;
cin.get();
return 0;
}
double cube(double a)
{
a *= a*a;
return a;
}
double refcube(double &ra)
{
ra *= ra*ra;
return ra;
}
上程序实际上并没有改变x的值,存疑。
使用时可以加const参数,写成:double cube(const double &ra)保证函数内部ra值不被改变。
NOTES:
函数返回引用时(即free_throw & func(……))最重要的一点是:避免函数返回终止时,不再存在的内存单元引用。
5.继承
使特性从一个类传递到另一个类的特性叫继承。1.派生类继承基类的方法。2.基类引用可以指向派生类的对象,无需强制转换。
6.处理文件相关的一个程序示例:
#include<iostream>
#include<cstdlib>
#include<fstream>
using namespace std;
void file_it(ostream &os,double fo, const double fe[],int n);
const int LIMIT = 5;
int main()
{
ofstream fout;
const char *fn ="1.txt";
fout.open(fn);
if (!fout.is_open())
{
cout <<"can'topen " <<fn << " ";
exit(EXIT_FAILURE);
}
double objective;
cout <<"Enteryour focal length of your telescope objective in mm: ";
cin >>objective;
double eps[LIMIT];
cout <<"enterthe focal length, in mm, of " << LIMIT<< "eyepieces" <<endl;
for (int i =0; i < LIMIT; i++)
{
cout <<"eyepieces# " <<i + 1 << " : ";
cin >>eps[i];
}
file_it(fout,objective, eps, LIMIT); //写入文件中
file_it(cout,objective, eps, LIMIT); //显示到屏幕上
cout <<"done"<<endl;
return 0;
}
void file_it(ostream &os, double fo, const double fe[], int n)
{
ios_base:: fmtflags initial;
initial= os.setf(ios_base::fixed); //saveinitial formating state
os.precision(0);
os <<"focallength of objective: " << fo <<"mm ";
os.setf(ios::showpoint);
os.precision(1);
os.width(12);
os <<"f.l.eyepiece";
os.width(15);
os <<"magnification" <<endl;
for (int i =0; i < n; i++)
{
os.width(12);
os <<fe[i];
os.width(15);
os <<int(fo / fe[i] +0.5) << endl;
}
os.setf(initial);
cin.get();
}
Chapter9
1.名称空间
名称空间可以是全局的,也可以在另一个空间中,但不能再代码段内。
名称空间可以自己定义,格式为:
Namespace{
……
}(没有分号)
名称空间可以嵌套:
Aaaaa:bbbbb:c
2.using声明和using编译命令
声明:using std::cin
编译:using namespace std