1. 程式人生 > >讀書筆記:實現string類的建構函式、拷貝建構函式、解構函式、過載運算子=

讀書筆記:實現string類的建構函式、拷貝建構函式、解構函式、過載運算子=

#include <iostream>
#include <cassert>
#include <cstring>
using namespace std;

class MyString{
public:
    MyString(const char* pData = NULL);
    MyString(const MyString& other);
    ~MyString();
    MyString& MyString::operator= (const MyString &str);
private:
    char* m_pData;
};

MyString::MyString(const char* pData=NULL){
    if(NULL == pData){
        m_pData = new char[1];
        *m_pData = '\0';
    } else {
        m_pData = new char[strlen(pData)+1];
        strcpy(m_pData, pData);
    }
}

MyString::MyString(const MyString& other){
    m_pData = new char[strlen(other.m_pData)+1];
    strcpy(m_pData, other.m_pData);
}

MyString::~MyString(){
    delete [] m_pData;
}

MyString& MyString::operator= (const MyString &str){
    if(this == &str)
        return *this;
    delete m_pData;//
    m_pData = NULL;
    m_pData = new char[strlen(str.m_pData)+1];
    strcpy(m_pData, str.m_pData);
    return *this;
}

相關推薦

讀書筆記實現string建構函式拷貝建構函式函式過載運算子=

#include <iostream> #include <cassert> #include <cstring> using namespace std; class MyString{ public: MyString(co

[收集]c++抽象純虛擬函式以及巧用純虛函式實現介面

在Java、C#中有關鍵詞abstract指明抽象函式、抽象類,但是在C++中沒有這個關鍵詞,很顯然,在C++也會需要只需要在基類宣告某函式的情況,而不需要寫具體的實現,那C++中是如何實現這一功能的,答案是純虛擬函式。 含有純虛擬函式的類是抽象類,不能生成物件,只能派生。

C++中基函式為什麼要用virtual虛函式【轉】

(轉自:https://blog.csdn.net/iicy266/article/details/11906457) 知識背景          要弄明白這個問題,首先要了解下C++中的動態繫結。&n

27.能否在建構函式中丟擲異常?函式呢?

首先,我們要明確一點!一個函式執行的過程中,如果丟擲異常,會導致函式提前終止! 在C++建構函式中,既需要分配記憶體,又需要丟擲異常時要特別注意防止記憶體洩露的情況發生。因為在建構函式中丟擲異常,在概念上將被視為該物件沒有被成功構造,因此當前物件的解構函式就不會被呼叫。同時

C++中基函式為什麼要用virtual虛函式

知識背景          要弄明白這個問題,首先要了解下C++中的動態繫結。  正題          直接的講,C++中基類採用virtual虛解構函式是為了防止記憶體洩漏。具體地說,如果派生類中申請了記憶體空間,並在其解構函式中對這些記憶體空間進行釋放

C++面試時應該實現string(建構函式拷貝建構函式賦值運算子過載和解函式

一、string類的4個基本函式是什麼? 建構函式 拷貝建構函式 賦值運算子過載 解構函式 二、函式實現 1.建構函式 String(char* pStr = " ")

【C++筆記】編寫string建構函式函式和賦值函式

#include<iostream> using namespace std; class String { public: String(const char *str=NULL); //普通建構函式 String(const Stri

c++實現String建構函式函式,複製建構函式,各類運算子過載函式的編寫)

編寫類 String 的建構函式,解構函式,複製建構函式  需要過載下面的運算子: 1、<、>、==和!=比較運算子 2、+=連線運算子和賦值運算子 3、<<輸出運算子和>>輸入運算子 String.h #ifndef _STRING

C++ String建構函式拷貝建構函式實現

建構函式、解構函式與賦值函式是每個類最基本的函式,在一些公司的面試中也會經常問到這方面的問題。每個類只有一個解構函式和一個賦值函式,但可以有多個建構函式(包含一個拷貝建構函式,其它的稱為普通建構函式)。對於任意一個類A,如果不手動編寫上述函式,C++編譯器將自動為類A生成四

C/C++面試題編寫String建構函式函式和賦值函式

考點:建構函式、解構函式和賦值函式的編寫方法出現頻率:☆☆☆☆☆已知類String的原型為:        class String        {        public:                String(const char *str = NULL);

String建構函式拷貝建構函式函式和賦值運算子過載函式實現

#include <iostream> using namespace std; class String { public: String(const char* str= NULL); String(const String& other); ~

Effective C++筆記之七為多型基宣告virtual函式

應該為多型基類宣告virtual解構函式,否則容易造成記憶體洩露。 因為C++明白指出,當derived class物件經由一個base class指標被刪除,而該base class如果帶有一個non-virtual解構函式,其結果未定義一實際執行時通常發生的是物件的derived成分沒

Effective Java (3rd Editin) 讀書筆記3 和介面

3 類和介面 Item 15:最小化類和成員的訪問許可權 一個設計優秀的類應該隱藏它的所有實現細節,將它的 API 和內部實現乾淨地分離開。這種軟體設計的基本準則被稱為“封裝”(encapsulation)。 封裝的優點: 組成系統的各元件之間解耦,使得它們能夠獨立地

機器學習實戰---讀書筆記 第10章 利用K均值聚演算法對未標註資料分組---1

#!/usr/bin/env python # encoding: utf-8 import os from matplotlib import pyplot as plt from numpy import * ''' 讀書筆記之--<<機器學習實戰>>--第10章_

讀書筆記《Effective c++》 條款07 為多型基宣告virtual函式

這個其實不用多說,用過OO類的語言應該都要這樣。 這麼看來簡單的物件和delphi的物件結構差不多。 書中說c++不支援final,在c++11中已經支援了,所以如果不希望類被繼承,可以加上final c++的final有兩個用途: 1.阻止類被繼承 2.組織虛擬函式被

編寫String建構函式拷貝建構函式函式和賦值函式

class String { public: String(const char *str = NULL); // 普通建構函式 String(const String &other); // 拷貝建構函式 ~String(void);

編寫String建構函式拷貝建構函式函式和賦值函式

 編寫類String 的建構函式、解構函式和賦值函式,已知類String 的原型為: class String { public:String(const char *str = NULL); // 普通建構函式String(const String &other

C++第十週【任務2】定義一個名為CPerson的,有以下私有成員:姓名身份證號性別和年齡,成員函式建構函式函式輸出資訊的函式

/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱: C++第十週【任務2】 * 作

編寫String建構函式函式和賦值函式

//普通建構函式  String::String(const char *str)  {          if(str==NULL)          {                  m_data = new char[1]; // 得分點:對空字串自動申請存放結束

c++訪問許可權,建構函式拷貝建構函式函式

類的定義 類可以看做是一種資料型別,類這種資料型別是一個包含成員變數和成員函式的集合。類的成員變數和普通變數一樣,也有資料型別和名稱,佔用固定長度的記憶體。但是,在定義類的時候不能對成員變數賦值,因為類只是一種資料型別或者說是一種模板,本身不佔用記憶體空間,而變數的值則需要