Time of Update: 2018-12-06
C++拷貝建構函式的幾個細節關鍵字: c++拷貝建構函式是C++最基礎的概念之一,大家自認為對拷貝建構函式瞭解嗎?請大家先回答一下三個問題:1. 以下函數哪個是拷貝建構函式,為什麼?X::X(const X&); X::X(X); X::X(X&, int a=1); X::X(X&, int a=1, b=2); 2. 一個類中可以存在多於一個的拷貝建構函式嗎?3. 寫出以下程式段的輸出結果, 並說明為什麼?
Time of Update: 2018-12-06
雖然對象複製看上去很簡單,然而如果你沒有對其正確理解,可能會出現一些嚴重問題。預設情況下,複製對象會導致相應的所有成員的複製。如果你只有執行個體成員,這看上去是相當不錯的。但是如果你的類中含有指向在堆中分配的對象時,情況會怎樣呢?考慮下面的代碼片斷:#include <stdio.h> #include <string.h> class Person { private:
Time of Update: 2018-12-06
C++多繼承 多繼承可以看作是單繼承的擴充。所謂多繼承是指衍生類別具有多個基類,衍生類別與每個基類之間的關係仍可看作是一個單繼承。 多繼承下衍生類別的定義格式如下: class
Time of Update: 2018-12-06
在過去的學習中,我們始終接觸的單個類的繼承,但是在現實生活中,一些新事物往往會擁有兩個或者兩個以上事物的屬性,為瞭解決這個問題,C++引入了多重繼承的概念,C++允許為一個衍生類別指定多個基類,這樣的繼承結構被稱做多重繼承。 舉個例子,交通工具類可以派生出汽車和船兩個子類,但擁有汽車和船共同特性水陸兩用汽車就必須繼承來自汽車類與船類的共同屬性。 由此我們不難想出如下的圖例與代碼: 當一個衍生類別要使用多重繼承的時候,必須在衍生類別名和冒號之後列出所有基類的類名,並用逗好分隔。 #
Time of Update: 2018-12-06
這幾天寫的程式應用到多繼承。以前對多繼承的概念非常清晰,可是很久沒用就有點模糊了。重新研究一下,“重新整理”下記憶。 假設我們有下面的代碼: #include <stdio.h> class A { private: char data; public: A(){data = 'A';} virtual void Show(){printf("A\n");}; virtual void DispA(){printf("a\n");}; }; class B {
Time of Update: 2018-12-06
由於辭職的原因,最近正在忙於找工作。在這段期間收到了一家公司的上機測試題,一共兩道題,其中一道題是關於REST API的應用。雖然在面試時,我已經說過,不懂REST,但那面試PM還是給了一道這題讓我做。面試的PM還是比較友好,沒有限定時間,結果自己不爭氣,一邊查資料一邊做,一個多小時過了還是沒做出來,所以最後我放棄了,當然面試也就失敗了。於是歸納了一下失敗的原因,主要還是對REST不瞭解,把REST當做Web
Time of Update: 2018-12-06
局部類型局部類型的引入沒有局部類型的時候(C# 1.0)class App{ public void Foo(){...} ... public void Bar(){...} ...}有了局部類型之後(C# 2.0)partial class App{ public void Foo() {...} ...}partial class App{ public void Bar() {...}
Time of Update: 2018-12-06
一談引用引用(reference)是c++對c語言的重要擴充。 一、引用的概念 引用引入了對象的一個同義字。定義引用的表示方法與定義指標相似,只是用&代替了*。 例如: Point pt1(10,10); Point &pt2=pt1;
Time of Update: 2018-12-06
C++提供的編譯預先處理功能主要有以下三種: (一) 宏定義 (二) 檔案包含 (三) 條件編譯在C++中,我們一般用const定義符號常量。很顯然,用const定義常量比用define定義常量更好。 在使用宏定義時應注意的是: (a) 在書寫#define 命令時,注意<宏名>和<字串>之間用空格分開,而不是用等號串連。 (b) 使用#define定義的標識符不是變數,它只用作宏替換,因此不佔有記憶體。 (c)
Time of Update: 2018-12-06
本章主要講述了虛函數的不適用情況:虛函數有時會帶來很大的消耗;虛函數不總是提供所需的行為;有時我們寫一個類時,可能不想考慮派生問題。 1、虛函數有時會帶來很大的消耗:調用一個虛函數通常由3個記憶體引用取出:從對象取出描述物件類型的表的地址值;取出虛函數的地址;在可能的較大外圍對象中,取出本對象的地址值。虛函數的開銷問題值得關注嗎?這要取決於具體應用。顯然,成員函數越大,變為虛函數就越不會是問題。實際上,同樣的觀點也適用於邊界檢查:去掉它就會減掉函數本身的3個記憶體引用中的一個,所以我們有理由所邊
Time of Update: 2018-12-06
C++中的一個更為重要的思想是使用者自訂類型可以很容易地當作內建類型使用。通過定義新類型,使用者可以為了他們自己的目的來定製語言。這種強大的工具如果被錯誤的使用,便會十分危險。實際上,設計類庫和設計程式設計語言是相似的,而且應該給予高度的重視。 字串類 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 class String { 2
Time of Update: 2018-12-06
抽象資料類型設計一個好程式庫的要求之一就是徹底隔離介面和實現,C++的做法是通過構造、解構函式和成員函數:C++語言中將介面和實現分隔開的基本的方法之一就是採用建構函式和解構函式。建構函式本身提供了產生給定類對象的方法;解構函式則提供了與建構函式想法的行為。成員函數能夠防止使用者訪問那些他們不應該看到的類成員。型別安全地連結使用C庫時,可能一個函數存在於多個庫內,例如sqrt(double)可能在math.h標頭檔內, extern double
Time of Update: 2018-12-06
C#沒有了全域變數的概念,我們只能通過static來共用變數。如何傳入引用變數,例子:函數的聲明需要有ref關鍵字:public static void a(ref int i){} 函數的調用也需要有ref關鍵字:a(ref 4); 帶輸出參數的方法,例子:函數的聲明需要有out關鍵字,參數需要在這函數裡面初始化:public static void b(out int i){}函數的調用也需要有out關鍵字:b(out
Time of Update: 2018-12-06
//構造器的名稱必須與類名相同,且沒有傳回值class A : Object{//這表示類A繼承Object public A() : base(){}//這表示引用的是父類Object的建構函式} //this的概念不是類本身,而是表示類建立後的執行個體 // 調用無參建構函式class B{public B(){}public B(int i) : this() {}//:this()表示首先調用B的無參建構函式public B(string s) : this(){} //:this()
Time of Update: 2018-12-06
在C#中一維數組的表示與在java中相同,可是二維或以上的數組卻有所差異,以下作說明。我們知道在Java中二維數組的表示例子如下:int[][] a = new int[3][4]; //數組是表示3行4列不過在c#中二維數組的表示例子如下:int[,] a = new int[3,4]; //數組是表示3行4列而如果寫成的是java的形式則變成是數組的數組,例子如下:int[][] a = new int[3][];//列數是隨意的a[0] = {1,2}; a[1] = {1,2,4
Time of Update: 2018-12-06
int a = 7;long b;b = a;//隱式轉換成功,說明低位的可以轉換為高位a = b;//隱式轉換不成功,說明高位的不可以轉換為低位a = (int)b;//需要使用到顯示轉換,而且有可能會發生溢出的可怕效果,而且C#不會自動檢查溢出a = checked((int)b)//使用checked 手動讓程式檢查溢出,或者使用checked{}檢查語句塊 , unchecked{}表示允許這些程式內容溢出 如下的程況是特殊程況:Byte b = 100;//b = b + 100;/
Time of Update: 2018-12-06
C#之存取控制修飾符分為6種,他們可以使用的範圍如下:1. default:類內部2. public: 類內部程式集內子類程式集外3. private: 類內部4. interval: 類內部程式集內子類5. protected: 類內部6. protected interval: 類內部程式集內子類 ***interval與protected interval的區別:interval不可以訪問在不同程式集類 子類訪問父類 類的特有的存取控制修飾符:sealed:
Time of Update: 2018-12-06
private string name;private string age;//以下代碼等價於 public void SetName(string values){ name = values;} public string GetName(){ return name; } public void SetSex(string values){ sex = values;} public string GetSex(){ return sex; } ===================
Time of Update: 2018-12-06
命名空間使用的關鍵字是namespace,命名空間可以互相嵌套使用命名空間的好處:1. 代碼可分布在多個檔案中,也就是擁有相同的命名空間可以分步在不同的檔案當中2. 命名空間具有擴充性,例子: 在C#中可以把類庫編譯成dll檔案從而讓程式調用,方法如下,在windows命令列下輸入,csc /target:library "需要轉為dll檔案的cs檔案的檔案名稱".cs;把dll檔案與主檔案進行關聯,csc /reference:"dll檔案名稱".dll
Time of Update: 2018-12-06
using System;using System.Collections.Generic;using System.Text;using System.Net.Mail;using System.Net;namespace MyQuery.Utils{ /// <summary> /// 封裝郵件處理 /// by 賈世義 2011-6-3 /// </summary> public static class MailHelper {