构析与构造函数

来源:互联网 发布:caxa线切割编程软件 编辑:程序博客网 时间:2024/06/06 17:02
#include <iostream>

class String; 

istream& operator>>( istream&, String& ); 
ostream& operator<<( ostream&, const String& 
 
class String { 
public: 
//  一组重载的构造函数 
//  提供自动初始化功能 
// String str1;              // String() 
// String str2( "literal" ); // String( const
// String str3( str2 );      // String( const 
String(); 
String( const char* ); 
String( const String& ); 
 
//  析构函数自动析构 
~String();  
 
//  一组重载的赋值操作符 
// str1 = str2 
// str3 = "a string literal" 

String& operator=( const String& ); 
String& operator=( const char* ); 
 
//  一组重载的等于操作符 
// str1 == str2; 
// str3 ==  a string literal ; 
bool operator==( const String& ); 
bool operator==( const char* ); 
 
//  重载的下标操作符 
// str1[ 0 ] = str2[ 0 ]; 
char& operator[]( int ); 
 
//  成员访问函数 
int   size()  { return _size;   } 
char* c_str() { return _string; }  
 
private: 
int   _size; 

char *_string; 
}; 

在main函数中通过String str1; String str2( "a string literal" ); 或String str3( str2 ); 

构造函数:什么是构造函数?通俗的讲,在类中,函数名和类名相同的函数称为构造函数。它的作用是在建立一个对象时,作某些初始化的工作(例如对数据赋予初值)。C++允许同名函数,也就允许在一个类中有多个构造函数。如果一个都没有,编译器将为该类产生一个默认的构造函数。构造函数上惟一的语法限制是它不能指定返回类型,甚至void 也不行。不带参数的构造函数:一般形式为 类名 对象名(){函数体}带参数的构造函数:不带参数的构造函数,只能以固定不变的值初始化对象。带参数构造函数的初始化要灵活的多,通过传递给构造函数的参数,可以赋予对象不同的初始值。一般形式为:构造函数名(形参表);创建对象使用时:类名 对象名(实参表);构造函数参数的初始值:构造函数的参数可以有缺省值。当定义对象时,如果不给出参数,就自动把相应的缺省参数值赋给对象。一般形式为:构造函数名(参数=缺省值,参数=缺省值,……);析构函数:当一个类的对象离开作用域时,析构函数将被调用(系统自动调用)。析构函数的名字和类名一样,不过要在前面加上 ~ 。对一个类来说,只能允许一个析构函数,析构函数不能有参数,并且也没有返回值。析构函数的作用完成一个清理工作如释放从堆中分配的内存。一个类中可以有多个构造函数,但析构函数只能有一个。对象被析构的顺序,与其建立时的顺序相反,即后构造的对象先析构


原创粉丝点击