C++文件读写操作



C++文件读写操作,相关的头文件:#include <fstream>

需要相关的类

fstream提供三种类,实现C++对文件的操作

ofstream:写操作,由ostream引申而来

ifstream:读操作,由istream引申而来

fstream :同时读写操作,由iostream引申而来


文件的类型:文本文件 和 二进制文件

文件读写的步骤:

1、包含的头文件:#include <fstream>

2、创建流

3、打开文件(文件和流关联)

4、读写 (写操作:<<,put( ), w[......]

Read more

C++模板实例使用模板实现集合类(堆栈)

C++模板实例使用模板实现集合类(堆栈)。

//stack集合类是一个简单的堆栈的实现。 
//这里有两个模板参数,T和size,指定堆栈中的元素类型和堆栈中项数的最大值。
//push 和 pop成员函数添加和删除堆栈中的项,并在堆栈底部增加。
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
template <class T,int size> //出错点
class stack
{
private[......]

Read more

C++类模板基础知识

C++类模板基础知识,类模板与模板类为什么要引入类模板:类模板是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大提高编程的效率。

注意:

1、类模板是参数化的类,即用于实现数据类型参数化的类。

2、应用类模板可以使类中的数据成员、成员函数的参数及成员函数的返回值,能根据模板参数匹配情况取任意数据类型

语法:

//类模板的定义

[cpp] view plaincopy

  1. template <类型形参表>
  2. [......]

Read more

C++函数模板基础知识

C++函数模板基础知识。为什么要引入模板:为了避免代码重复,程序员可以编写脱离数据类型通用模板。模板的分类:函数模板 + 类模板

注意:模板的声明或定义只能在全局,命名空间或类范围内进行。不能在函数内进行,比如不能在main函数中声明或定义一个模板。

函数模板:

定义:

函数模板:关键词在后两个字,模板:提供一类函数的抽象,以任意类型T为参数把具有相同程序正文的一类函数抽象出来,可以适合任意类型T的参数。

模板函数:重点在函数,是对函数模板进行参数实例化后的结果,是一个具体的函数。

什么时候使用函数模板:会有一类函数,它们几乎相同,唯一的区别就是形参类型不同[......]

Read more

C++指针悬挂与赋值操作符的重载

C++指针悬挂和赋值操作符的重载。

指针悬挂:

问题:使用new申请的内存内存空间无法访问,也无法释放。

原因:直接对指向new申请的存储空间的指针变量进行赋值修改

后果:失去了原来的地址,原来的空间无法访问也无法释放,造成内存泄漏

还可能造成同一个内存释放两次

容易引起指针悬挂的方式:对象的初始化和对象间赋值

容易引起指针悬挂的条件:类中含有指针类型的成员时,使用默认的拷贝构造函数和赋值函数都会出现两个指针变量互相赋值,产生指针悬挂的问题。

解决方法:需要重新定义拷贝构造函数和超载赋值运算符

赋值操作符:

作用:两个已经存在的对象间[......]

Read more

C++拷贝构造函数使用

C++拷贝构造函数,为什么要引入与使用拷贝构造函数?

       作用:创建一个对象的同时,使用一个已经存在的对象给另一个对象赋值

具体来说:它将一个已经定义过对象的数据成员 逐一拷贝给 新对象,而产生两个完全相同的内存拷贝

做比较:拷贝构造函数:对象被创建 +  用一个已经存在的对象进行初始化

拷贝赋值函数:对象已经存在不用创建 + 用一个已经存在的对象进行初始化

举例:string a(“hello”);//调用构造函数

string b(“would”);//调用构造函数

string c=a;//调用拷贝构造函数–风格差,应使用stri[......]

Read more

C++构造函数和析构函数

C++构造函数和析构函数。构造函数:

作用:

1)分配空间:分配非静态数据成员的存储空间

2)初始化成员:初始化非静态数据成员

分配空间:

1)含有指针变量,需要程序员显式申请空间(使用new申请)

2)非指针变量:由系统自动分配空间

初始化成员:

1)使用赋值语句初始化:一般的变量

2)使用表达式表初始化:一般的变量 +  Const成员,引用成员,对象成员

调用时机:在定义对象的时候,系统自动调用构造函数

1)对象被创建时,自动调用构造函数

Coord p1(1);

Coord p2=1;  //此时也会调用构造[......]

Read more

C++友元函数实例源码介绍

C++友元函数实例源码介绍,1、为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率,具体来说:为了使其他类的成员函数直接访问该类的私有变量

即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数

优点:能够提高效率,表达简单、清晰

缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数。

2、什么时候使用友元函数:

1)运算符重载的某些场合需要使用友元。

2)两个类要共享数据的时候

3、怎么使用友元函数:

友元函数的参数:

因为友元函数没有this指针,则参数要有三种情况:[......]

Read more

C++动态存储空间如何分配和释放

C++动态存储空间如何分配和释放。

使用new申请空间:

特点:

1、没有名字,只能通过指针间接访问它们。

2、从堆中申请空间

分类:

变量:

语法:指针变量 = new 类型名;

Delete 指针变量

举例:int *p;

p=new int;

delete p;

初始化:

*p=90;

p=new int(99);

一维数组:

语法:指针变量 = new 类型名[下标表达式]; 下标表达式是整型常量或整型表达式

Delete [ ]指针变量;—[ ]表明是个数组,但不需要指出其大小[......]

Read more

C++与C的语法区别输入输出

C++与C的语法区别_输入输出。

语法区别:

C:使用printf、scanf、 gets、puts等

C++:使用cin、cout

优点:

C++使用cin和cout有三个突出优点:

1、简单安全: 根据操作对象自适应的,只需要使用>>或者<<就可以搞定一切

2、支持用户自定义类型的流操作: 需要重载<<运算符

注意事项:

1、要使用头文件iostream。cout和cin并不是C++语言中提供的语句,它们是iostream类的对象,故使用的时候必须加上头文件iostream,又因为cout是std名字[......]

Read more