string類---構造函數


頭文件

#pragma once
class TestString
{
  public:
    TestString(void);
    ~TestString(void);

  public:
    TestString(const char * str = NULL);
    TestString(const TestString &other);
    TestString &operator = (const TestString &other);

  private:
    char *m_data;
};

 

實現文件

#include "StdAfx.h"
#include "TestString.h"
#include <string.h>


TestString::TestString(void)
{
}


TestString::~TestString(void)
{
  delete []m_data;
}

TestString::TestString(const char * str)
{
  if (str == NULL)
  {
    m_data = new char[1];
    m_data = "";
  }
  else
  {
    m_data = new char[strlen(str) + 1];
    strcpy_s(m_data, strlen(str) + 1, str);
  }
}

TestString::TestString(const TestString &other)
{
  m_data = new char[strlen(other.m_data) + 1];
  strcpy_s(m_data, strlen(other.m_data) + 1, other.m_data);
}

TestString & TestString::operator = (const TestString &other)
{
  /自賦值
  if (this == &other)
  {
    return *this;
  }
  delete []m_data;

  m_data = new char[strlen(other.m_data) + 1];
  strcpy_s(m_data, strlen(other.m_data) + 1, other.m_data);
  return *this;
}

 

調用測試

char sztest[] = "abcd";
char sztest2[] = "abcde";
TestString str(sztest);
TestString str2(sztest2);
TestString str3(void);  //這里有警告,未調用原型函數(是否是有意用變量定義的?)
str2 = sztest;
str3 = sztest;  //錯誤,表達式必須是可修改的左值

當把str3 = sztest;注釋,依然會有警告

1.指定了多個默認構造函數

2.未調用原型函數(是否是有意用變量定義的?)

對於第二點警告:TestString str3(void);編譯無法識別調用的是TestString(void)與TestString(const char * str = NULL)

對於第一點警告:TestString(void);和TestString(const char * str = NULL);是否等同


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM