更多参考其他文档菜鸟文档 、W3C 、微软C++文档
从C到C++
C和C++的区别
#include <iostream> int main () { std::cout << "Enter two numbers" << std::endl; int v1, v2; std::cin >> v1 >> v2; std::cout << "the sum of" << v1 << "and" << v2 << "is" << v1 + v2 << std::endl; return 0 ; }
c++输入输出时不需要制定格式字符
通过标准输出流对象输出输入
std是命名空间,如果定义的实例名相同也不影响,因为是在命名空间中的实例
#include <iostream> using namespace std; int main () { cout << "Enter two numbers" << endl; int v1, v2; cin >> v1 >> v2; cout << "the sum of" << v1 << "and" << v2 << "is" << v1 + v2 << endl; return 0 ; }
iostream : istream,ostream
标准输入输出对象
标准库定义了4个IO对象:
cin:istream对象,标准输入
cout:ostream对象,标准输出
cerr:标准错误。用来输出警告和错误信息给程序的使用者
clog:用于产生程序执行的一般信息
“ << ” 操作符
cout << 表达式<< 表达式<< endl
“ >>” 操作符
cin >> 表达式>> 表达式<< endl
表达式只能是变量或内存区,否则就不能将读入的数据放到表达式当中了
输入数据的几种方式
数据类型和表达式的区别
逻辑类型、引用类型、类 类型
基本类型转换
构造书类型
类类型
class abc { privte: public : }
引用
int n = 4 ;int & r = n; int n = 7 ;int & r = n; r = 4 ; cout<<r; cout<<n; n=5 ; cout<<r double a = 4 ,b =5 ;double & r1 = a;double & r2 = r1; r2 = 10 ; cout<<a<<endl; r1 = b;
交换函数
void swap (int *a,int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; } int main () { int a,b; swap (&a,&b); } void swap (int &a,int &b) { int tmp; tmp = a; a = b; b = tmp; } int main () { int a,b; swap (a,b); }
引用可以作为函数的返回值
int n = 4 ;int & SetValue () { return n;} int mian () { SetValue ()=40 ; cout<<n; return 0 ; }
常引用
常引用 不能通过引用修改值
int n = 400 ;const int & r = n; r = 200 ; 错误 n = 300 ; 除非进行强制转换
const关键字
建议少用 define 因为 用const 定义有数据类型的检验 const int MAX_VAL = 23 ; const double Pi = 3.14 ; const char *SCHOOL_NAME = "Peking University" ; const int * p = & n; const int *name ="chen" ; name[3 ] ="a" ; name ="zhang" ; void MyPrintf (const char * p) { strcpy (p,"this" ); printf ("%s" ,p); } int * const name="chen" ; const char * const name="chen" ;
动态内存分配
C 使用malloc , c++ 使用new P = new T ; 例: int *pn;pn = new int ; *pn = 5 ; P = new T[N]; 例: int * pn;int i = 5 ;pn = new int [i * 20 ]; pn[0 ] = 20 ; pn[100 ] = 30 ; 使用delet运算符进行释放 delete 指针 ; int *p = new int ;*p = 5 ; delete p;delete p; delete [] 指针; 例: int *p = new int [20 ];p[0 ] = 1 ; delete [] p ;
内联函数
inline int Max (int a, int b) { if (a>b) return a; return b; } 会增大空间,因为调用时相当于将函数的内部语句插入直接使用,根据程序的体积会有体良上的影响
函数重载
int Max (double f1, double f2) {}int Max (int f1, int f2) {}int Max (int f1, int f2 , int f3) {}Max (3 ,2.4 );
函数缺省参数
void func (int x1, int x2 = 2 ,,int x3 = 3 ) {}fun (10 );fun (10 ,8 ; fun (10 ,,8 );
作用域运算符
:: 变量名相同时,::可使全局变量在局部变量的作用域内使用 int a;int main () { int a; ::a ; }
结构化程序设计
数据结构和函数操作关系不清、 函数和函数的关系不清 不方便重用函数
面向对象程序设计
面向对象程序 = 类 + 类 + 类 抽象、封装、继承、多态
类和对象基本概念
写一个程序,输入矩形的长和宽,输出面积和周长 矩形类 { 长 、 宽 变量 计算矩形周长函数; 计算矩形面积函数; 输出矩形长宽函数; } 例: class CRectangle //类型的名字,用户自定义{ public : int w,h; int Area () { return w * h; } int Perimeter () { return 2 * (w + h); } void Init ( int w_,int h_) { w = w_; h = h_; } }; int main () { int w,h; CRectangle r; cin >> w >> h; r.Init (w,h); cout<< r.Area () << endl << r.Perimeter (); return 0 ; }
对象的内存分配
类似C中的结构体
和结构变量相同,对象所占用的内存空间的大小,等于所有成员变量的大小之和
对象,只包含了成员变量,不包含成员函数
对象之间的运算
如果使用了“重载”,则可以进行其他类型操作、判断、算数运算等
class CRectangle { public : int w,h; int Area () { return w * h; } int Perimeter () { return 2 * (w + h); } void Init ( int w_,int h_) { w = w_; h = h_; } }; int main () { Crectangle r1,r2; r1.w = 5 ; r2.Init (5 ,4 ); return 0 ; } int main () { Crectangle r1,r2; Crectangle * p1 = & r1; Crectangle * p2 = & r2; p1->w = 5 ; p2->Init (5 ,4 ); return 0 ; } int main () { Crectangle r2; Crectangle & rr = r2; rr.w = 5 ; rr.Init (5 ,4 ); return 0 ; } void PrintRectangle (CRectangle & r) { cout<<r.Area ()<<"," <<r.perimeter (); } int main () { Crectangle r3; r3.Init (5 ,4 ); PrintRectangle (r3); return 0 ; }
实例
#include <iostream> using namespace std;void PrintStar (int n) { int i, j; for ( i = 1 ; i <= n;++i) { for ( j = 0 ; j < n - i;++j) { cout << " " ; } for ( j = 0 ; j < i;++j) { cout << "*" << " " ; } cout << endl; } for ( i = 1 ; i <=5 ;++i) { for ( j = 0 ; j < i; ++j) { cout << " " ; } for ( j = n-i; j > 0 ;--j) { cout << "*" << " " ; } cout << endl; } } int main () { PrintStar (5 ); return 0 ; }