类string的构造函数、拷贝构造函数和析构函数

String 类的原型如下

class String
{
   public:
          String(const char *str=NULL); //构造函数
          String(const String &other); //拷贝构造函数
          ~String(void); //析构函数
          String& operator=(const String &other); //等号操作符重载

ShowString();

private:
          char *m_data; //指针
};

String::~String()
{
    delete [] m_data; //析构函数,释放地址空间
}
String::String(const char *str)
{
    if (str==NULL)//当初始化串不存在的时候,为m_data申请一个空间存放‘\0‘;
     {
        m_data=new char[1];
        *m_data=‘\0‘;
     }
    else//当初始化串存在的时候,为m_data申请同样大小的空间存放该串;
     {
        int length=strlen(str);
        m_data=new char[length+1];
        strcpy(m_data,str);
     }
}

String::String(const String &other)//拷贝构造函数,功能与构造函数类似。
{
    int length=strlen(other.m_data);
    m_data=new [length+1];
    strcpy(m_data,other.m_data);
}
String& String::operator =(const String &other) 
{
    if (this==&other)//当地址相同时,直接返回;
        return *this; 
 
    delete [] m_data;//当地址不相同时,删除原来申请的空间,重新开始构造;

int length= strlen (other.m_data);
    m_data=new [length+1];
    strcpy(m_data,other.m_data);

return *this; 
}

String::ShowString()//由于m_data是私有成员,对象只能通过public成员函数来访问;

{

cout<<this->m_data<<endl;

}

main()
{
String AD;
char * p="ABCDE";
String B(p);
AD.ShowString();
AD=B;
AD.ShowString();

}

1. strCopy 函数可以为标准库函数 char *strcpy(char *dest, const char *src);

需要#inculde <string.h>

2.参考连接:

高质量C++C编程指南 http://man.chinaunix.net/develop/c&c++/c/c.htm

字符串函数 http://www.ggv.com.cn/forum/clib/string/strcpy.html

时间: 2024-08-07 21:19:56

类string的构造函数、拷贝构造函数和析构函数的相关文章

C++构造函数 &amp; 拷贝构造函数 &amp; 派生类的构造函数 &amp; 虚继承的构造函数

构造函数 ,是一种特殊的方法 .主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 .特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载.(摘自百度百科构造函数). 一.最基本的构造函数 1 class Base 2 { 3 public: 4 Base(int var) : m_Var(var) 5 { 6 } 7 private: 8 int m_Var; 9 }; 以上构造函数的执行过程:

使用new分配内存的类需要自己定义拷贝构造函数

13.22 假定我们希望HasPtr的行为像一个值.即,对于对象所指向的string成员,每个对象都有一份自己的拷贝. #include<iostream> #include<string> #include<new> using namespace std; class HasPtr { public: HasPtr(const string &s=string()):ps(new string(s)),i(0){cout<<"const

构造函数 、析构函数 、拷贝构造函数 ~~~~~~~~~~拷贝构造函数

拷贝构造函数 1.拷贝构造函数作用: ①:程序中需要新建立一个对象,并用另一个同类的对象对它初始化: ②:当函数的参数为类的对象时,需要建立一个实参的拷贝: ③:函数的返回值是类的对象: 2 格式: 注意:关键字const是为了保护参数值,防止被改变 ///在类外定义,加域符 :: Box::Box(const Box &b) { hei=b.hei; len=b.len; wid=b.wid; } 3. 使用情况即考虑到其作用时 ① 建立一个新的对象 #include<iostream&g

类的赋值运算符和拷贝构造函数

#include<stdio.h> class A { private: const A& operator=(const A&); }; int main() { A a; A b = a;//ok,实际上是A b(a),即调用拷贝构造函数 A c; c = a;//error,因为'='已被声明为私有 return 0; }

C++类的构造、拷贝构造、析构函数等

1: 一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,如果你写 class A{}; 编译器处理后,就相当于: class A{ public: A();  //默认构造函数A(const A&);  //拷贝构造函数~A();  //析构函数A& operator=(const A& rhs); A* operator&();  //取地址运算符 const A* operator&() const;

c++类的拷贝、赋值与销毁(拷贝构造函数、拷贝赋值运算符析构函数)

拷贝构造函数     如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数. 拷贝构造函数第一个参数必须是一个引用类型.此参数几乎总是一个const的引用.拷贝构造函数在几种情况下都会被隐式地使用.因此,拷贝构造函数通常不应该是explicit的. 合成拷贝构造函数 与合成默认构造函数不同,即使我们定义了其他构造函数,编译器也会为我们合成一个拷贝构造函数. 对某些类来说,合成拷贝构造函数用来阻止我们拷贝该类类型的对象.而一般情况,合成的拷贝构造函数

【C/C++学院】(6)构造函数/析构函数/拷贝构造函数/深copy浅copy

1.构造函数 类的初始化即为构造函数.也为:隐式的初始化. 构造函数在对象初始化的时候,自动被调用.隐式的调用. 构造函数分为三种:有参构造函数.无参构造函数.拷贝构造函数. 有参构造函数调用有三种:括号法.等号法.手工法. #include <iostream> using namespace std; class Test { private: int m_a; public: Test()//无参构造函数 { } Test(const Test &obj)//拷贝构造函数 { }

C++类对象的复制-拷贝构造函数

在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同样是对象,谁也不能阻止我们用以下的方式进行复制,例如: #include <iostream>  using namespace std;    class Test  {  public:      Test(int temp)      {          p1=temp;      }  prote

构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序

构造函数.拷贝构造函数和析构函数的的调用时刻及调用顺序 对象是由“底层向上”开始构造的,当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止.因为,构造函数一开始构造时,总是要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时,如果无专门说明0,就调用直接基类的默认构造函数.在对象析构时,其顺序正好相反.   下面简单介绍下这三个函数. 构造函数       1.构造函数不能有返回值  

构造函数、拷贝构造函数、析构函数

构造函数:在对象被创建时利用特定的初始值构造对象,即初始化对象. 拷贝构造函数:用一个已经存在的对象去初始化另一个对象,这两个对象的类型应该是一样的. 格式: class 类名 { public: 类名(形参);                 //构造函数 类名(类名 &对象名);    //拷贝构造函数 ... }; 类名::类名(形参)            //构造函数的实现 { 函数体 } 类名::类(类名 &对象名)      //拷贝构造函数的实现 { 函数体 } 构造函数在