C++中文件的输入输出与类的成员等(复习)

#include<iostream>//cin、cout、cerr

#include<fstream>//infile、outfile

#include<string>

int main()

{

ofstream outfile(“E:\\test\\out_file.txt”);//输出文件路径

instream infile(“E:\\test\\in_file.txt”);//输入文件路径

if(!infile){

cerr<<”error: unable to open input file!\n”;

return -1;

}

if(!outfile){

cerr<<”error: unable to open output file!\n”;

return -2;

}

string word;

while(infile>>word)

outfile<<word<<” “;

return 0;

}

动态分配内存和释放:

int * pint=new int(1024);//int 类型对象,初始值为1024

int* pia=new int[10];//有4个int元素的数组

delete pint;//删除单个元素

delete []pia;//删除一个数组对象

断言assert()函数,会评定括号中的条件是否为假,为假则输出诊断信息并中断程序,为真则继续执行。包含在C的assert.h中和C++的cassert.h中。

关键字public和private控制对类成员的访问,公有(public)内的成员在一般程序的任何地方都可以访问,私有(private)内的成员只有该类的成员函数或友元(friend)中被访问。

公有成员提供类的公有接口(public interface)——实现了对类的行为操作的集合,私有成员提供私有实现代码(private implementation)——存储类的数据(属性)信息,这种“类的公有接口和私有实现代码相分离”的情况叫做类的信息隐藏。私有代码需定位问题、扩展或修改时,信息隐藏有助于减少修改和扩展代码量,只需要处理少量的需要访问这些实现代码的成员函数。

接口和实现的分离是C++中类的关键特征,接口是“用户可以应用到类对象上的操作”的集合,有三大部分构成:这些操作的名字、它们的返回值以及它们的参数列表。一般地,这些就是该类的用户所需要知道的全部内容。私有实现包括支持支持公有接口所必须的算法程序和数据。这有助于类的自由演化扩展和兼容。

子类往往有时候需要访问基类的实现,同时为了防止对基类实现一般性的访问,C++还提供保护(protected)级别的访问,在类的保护区域内的数据成员和成员函数,不提供给一般的程序访问,只提供给派生类(private中的内容只能基类自己访问,派生类不能使用)。

对于与类型相关的成员函数,它的具体算法实现由特定的基类或派生类的行为或实现决定,这些成员函数常被声明为virtual函数,虚函数的实际实现和调用要等到运行时依照被调用对象的实际基类或派生类的类型决定,而非虚函数在编译时刻即能确定被调用的函数。

C++中有两个成员访问操作符:用于类对象的点操作符(.)和用于类对象指针的箭头操作符(->)。引用(reference)是一种没有指针语法的指针,即不能用箭头操作符可用点操作符。

基类的构造函数不会被派生类自动继承(析构函数和拷贝赋值操作符同样不会);所以必须为派生类提供构造函数,也有助于通过构造函数这个接口把必要的参数传递给基类构造函数。子类构造函数中由冒号分割出来的部分称为成员初始化列表,它提供了一种向基类构造函数传递参数的机制。

inline IntArrayRC::IntArrayRC( int sz ):IntArray( sz ){};

C++中还支持两种继承方式:多重继承(multiple inheritance),一个类可从两个或两个以上基类派生而来;虚拟继承(virtual inheritance),这种继承方式下的基类的单个实例在多个派生类之间共享。

泛型设计:类模板、函数模板。异常处理:1、异常出现的点上抛出程序中出现的异常 ,正常程序挂起,直到异常被处理完毕(throw或raise)。2、在异常处理点(独立的函数或成员函数)上处理异常,处理完异常后,在处理点回复执行过程(try and catch)。

为了防止某些名字污染(影响)全局的名字空间,我们有必要把常用名字(类名和函数名等)封装起来。名字空间访问的4种方式:

1、限定修饰名字符,namespace_identifier::entity_name(例如:CPP_Primer_3E::Array<string> text; );

2、名字空间别名用一个可替代的、短的或更一般的名字与一个现有的名字关联起来。例如:

#include”IBM_Canada.h”

namespace LIB=IBM_Canada_Laboratory;

int main()

{

LIB::Arrary<int> ia(1024);

//…

}

3、using指示符使所有名字可见,例如:

#include”IBM_Canada.h”

using namespace IBM_Canada_Laboratory;

int main()

{

Arrary<int> ia(1024);

//…

}

4、using声明使名字空间单个声明可见,例如:

#include”IBM_Canada.h”

using IBM_Canada_Laboratory::Array;

int main()

{

Arrary<int> ia(1024); //正确

Matrix mat(4,4);//…错误

}

vector类模板只提供了一个最小的操作集合,如:等于、小于操作符,size()和empty()等。其他通用操作由独立的泛型算法提供,常用的泛型算法,必须#include<algorithm>:

search搜索算法:find(),find_if(),search(),binary_search(),count(),cout_if().

sorting and ordering分类排序与通用排序:sort(),partial_sort(),merge(),partition(),rotate(),reverse(),random_shuffle().

deletion删除算法:unique(),remove()。

numeric算术算法:accumulate(),partial_sum(),inner_product(), adjacent_difference()。

generation and mutation生成和变异算法:generate(),fill(),transformation(),copy(),for_each()。

relational关系算法:equal(),min(),max()。

原文:http://www.tebik.com/?p=165

posted on 2012-09-14 15:23  挺胸收腹  阅读(288)  评论(0编辑  收藏  举报

导航