赞
踩
本文讲述了参数传递中引用形参和非引用形参的区别,并且对哪些情况使用使用什么样的参数传递给出了说明。并且讲述了关于指针函数的了解和使用方法。在文章中还讲述了关于C++中流对象的特点和操作,包括文件流,控制流,字符串流以及文件的打开模式。
new和delete表达式不仅可以动态创建、撤销数组,而且可以使用于单个对象。用于创建单个对象的方法如下:
int *pa=new int;
int *pb=new int();
string *pc=new string;
new的作用是创建一个新的内存空间用于存放指定类型的数据并返回一个指向该内存地址的指针。那么pa和pb所指向的内存有什么不一样呢。在于值得初始化。如果是内置类型,没有调用()进行值初始化,值默认是没有定义的。如果是类类型没有调用()进行值初始化,则会调用默认的构造函数进行初始化。所以这里pc指向的对象是有一个空值的。但如果内置类型调用了()进行初始化,则会初始化为0。
如果创建了一个对象而不去释放它,久而久之就会造成内存泄漏了,所以要养成释放内存空间的习惯。释放空间使用的是delete。如下:
delete pa;
此关键字会删除pa指向的空间。要注意用delete使用的指针如果不是通过new返回的,这样的操作是没有定义的,是不合法的。当一个原来有值得指针被释放了以后就变成了一个悬垂指针,为了避免造成二次释放的错误,所以要养成一个好习惯,就是释放后的指针要设为0值。
pa=0;
定义函数的形参可以分为引用形参和非引用形参,每次函数激活的时候,都会重新创建形参,如果是非引用形参就将实参的副本赋值给它。如果是引用类型的形参,则形参只是实参的别名,因此对非引用类型进行修改不会影响实参的值,而对引用形参修改则会影响实参的值。
指针形参也只是指针实参的一个副本,因此对指针形参的修改不会影响实参对象,但是如果是修改指针形参所指对象的值(前提是,指针形参的值未改变),则实参所指对象也会被修改。如果指针形参所指的数据类型是const类型,则实参的值既可以是const类型也可以是非const类型。但如果指针形参所指的数据类型是非const类型,则只能传递指向非const类型的实参。
- /*
- 条件状态
- */
- int val = -1;
- istream::iostate state = cin.rdstate();
- while (cin >> val,!cin.eof())
- {
-
- if (cin.bad())
- {
- throw "输入流被破坏";
- break;
- }
- if (cin.fail())
- {
- cout << "输入的不是整数" << endl;
- cin.clear(istream::failbit);
- break;
- }
- cout << "输入成功" << endl;
-
- }
- cin.setstate(state);
- ifstream fstream("D://text.txt");
-
- if (fstream)
- {
- string s;
- while (fstream >> s)
- {
- cout << s << endl;
- }
- fstream.close();
- fstream.clear();
- }
- /*
- 标准的打开文件流的函数
- 记住,流的参数传递和返回值不可以使用赋值的方式,只能是引用传递或者指针
- */
- ifstream* openFile(ifstream *inFile, const string &fileName)
- {
- //由于不清楚文件流原本的状态,所以清除可以确保打开成功。
- inFile->close();
- inFile->clear();
- inFile->open(fileName.c_str);
- return inFile;
- }
- string line, word;
-
- while (getline(cin, line)&&line!="endl")
- {
- istringstream iString(line);
- if (iString)
- {
- while (iString >> word)
- {
- cout <<unitbuf<< word ;
- }
- cout << nounitbuf;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。