讀書筆記:實現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++類詳解:訪問許可權,建構函式,拷貝建構函式,解構函式
類的定義 類可以看做是一種資料型別,類這種資料型別是一個包含成員變數和成員函式的集合。類的成員變數和普通變數一樣,也有資料型別和名稱,佔用固定長度的記憶體。但是,在定義類的時候不能對成員變數賦值,因為類只是一種資料型別或者說是一種模板,本身不佔用記憶體空間,而變數的值則需要