1、cout--console output 控制台输出
cin---console input 控制台输入
endl--end line 结束一行
.\n-----换行
cout<<"aa"<<aa<<endl;输出aa
cin>>aa; 输入aa
2、#include <iostream> 系统自带得
#include "demo.h" 自己写的程序
3、关于字符数组赋值问题: char ca[100]="good good study \0 everyday";
cout<<"ca="<<ca<<endl; ca="good goood study" 到“\0”表示字符串结束标志。
4、
<iostream>和<iostream.h>是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。
后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。
因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用using namespace td;这样才能正确使用cout。
5、预处理器变量有两种:已定义和未定义
#define指示接受一个名字并定义改名字为预处理器变量
#ifndef 指示检测指定的预处理器是否未定义,那么更在其后的所有指示都被处理,直到出现#endif。
#ifndef SALES_H
#define SALES_H
#endif
6、空语句:只有一个分号得语句。
例如: if(score>80) ;--->该语句为空语句,不论score全部打印出来
cout<<"score"<<score<<endl;
即只有一个分号的语句,它什么也不做。有时用来做被转向点,或循环语句中的循环体。
7、指针初始化为NULL等效为初始化为0的值
如:int *pi=NULL;//int *pi=0;
因为指针的类型用于确定指针所指对象的类型,因此初始化或者赋值时必须保存类型的匹配。
double daval;
double *pd=&dval;(ok)
double * pd2=pd;(ok)
int *pi=pd;(error)
pi=&dval;(error)
8、对指针进行解引用可访问它所指的对象,*操作符将获取指针所指的对象。
string s(“hello world”);
string *sp=&s;
cout<<*sp;//prints hello world
string * sp="a new value"
cout<<*sp;//prints a new value
注意:给指针赋值或通过指针赋值
如果对左操作数进行解引用,则修改的是指针所指对象的值。如果没有使用解引用操作,则修改指针本省的值
9、c++通过**操作符指派一个指针指向另一个指针
int val=1024;
int *pi=&ival;
int **ppi=&pi;
10、在单个表达式中组合使用解引用和自增操作。
例如:vector<int>::iterator iter=ivec.begin();
while(iter!=ivec.end){
cout<<*iter++<<endl;
}
对于上述表达式中:理解*iter++:由于后自增操作的优越级高于解引用操作,所以*iter++等效于*(iter++).对于子表达式iter++使iter加1,然后返回iter原值副本作为该表达式的结果。因此,解引用操作*的iter未加1前的副本。
根据在后自增操作返回其操作数原值(没有加1)的副本。以类比的思想考虑问题,区别于++X这种形式的前自加的表达式,这样的表达式是输出加1后的结果。
11、箭头操作符和解引用操作符
点操作符优先级大于解引用。
C++在点操作符后使用的解引用操作等效于使用箭头操作符(->);
假如有一个指向类类型对象的指针(或迭代器),则下面的表达式:
(*p).fool;// p->fool;
12、构造函数的初始化分为2各阶段。(1)初始化段 (2)普通计算段(计算阶段是由构造函数体中的所有语句组成)
所以对于初始化变量时,尽量使用函数初始化列表进行初始化;
例如:
Test::Test(int a,int b):num1(a),num2(b){//其中num1、num2为成int型的成员变量
}
引用成员和const 成员初始化只能在函数初始化列表中进行初始化,例如:
const int cc;
int& dd;
Test::Test(int a,int b):cc(a),dd(b){//其中cc、dd为成int型的成员变量
}
对象成员(对象所对应的类没有默认的构造函数) 的初始化,也只能放在构造函数列表中
Tes test1;
Test::Test(int a,int b):test1(a)){//其中test1类成员变量
}
13、流运算符的重载
(1)流运算符的重载只能以友元函数的方式进行重载
(2)friend istream& operator>>(istream&,类类型&);
friend ostream& operator<<(osstram&,const 类类型&);
14、c++没有提供关于图形处理接口GUI和大并发的处理(多线程的功能)