1. 程式人生 > >C++中的宣告、定義、賦值和初始化

C++中的宣告、定義、賦值和初始化

定義:生成資料型別的一個例項。定義某型別的變數或物件時,系統會為該變數或物件分配記憶體。

賦值:讓已經定義好的變數或物件具有某個數值。

初始化:在定義的同時進行賦值。初始化有兩種形式:=和(),前者叫做複製初始化,複製初始化呼叫建構函式建立一個臨時物件,然後將該臨時物件作為引數呼叫複製建構函式;後者叫做直接初始化,直接初始化直接呼叫與實參匹配的建構函式。無論是哪種方式,初始化都是對變數或物件的一種構造。然而初始化和賦值不一樣,賦值時,物件已經存在;初始化時,物件正在生成。當然,兩者的結果都是死的賦值運算子左邊的物件具有與右邊的物件相同的值。

宣告:所有變數必須先宣告再使用,宣告時只需表明變數或物件的型別和名字,其目的是宣告該物件的存在。宣告不一定是定義,但定義一定是宣告。宣告通常有兩種方式:定義性宣告和extern實現的宣告。當定義完一個變數或物件,也就完成了該物件的宣告。以extern實現的宣告意思是:當需要引用定義在檔案作用域中的變數或物件時,在引用之前要以extern宣告該變數或物件。

相關推薦

C++宣告定義初始

定義:生成資料型別的一個例項。定義某型別的變數或物件時,系統會為該變數或物件分配記憶體。 賦值:讓已經定義好的變數或物件具有某個數值。 初始化:在定義的同時進行賦值。初始化有兩種形式:=和(),前者叫做複製初始化,複製初始化呼叫建構函式建立一個臨時物件,然後將該臨時物件作為

c++建構函式成員初始初始列表兩種方式的區別

先總結下: 由於類成員初始化總在建構函式執行之前 1)從必要性:      a. 成員是類或結構,且建構函式帶引數:成員初始化時無法呼叫預設(無參)建構函式      b. 成員是常量或引用:成員無法賦值,只能被初始化 2)從效率上:     如果在類建構函式裡賦值:在成員

淺析C++初始列表(區別初始

派生類不能直接訪問基類的私有成員,而必須通過基類方法進行訪問。 具體來說,派生類建構函式必須使用基類建構函式。 建立派生類物件時,程式首先建立基類物件。C++使用初始化列表完成這項工作。 RatedPlayer::RatedPlayer(int r, co

C#對於變量的聲明初始

最好 編譯 return 它的 con code 數據 類型安全 狀態   C#變量初始化是C#強調安全性的另一個例子。簡單地說,C#編譯器需要用某個初始值對變量進行初始化,之後才能在操作中引用該變量。大多數現代編譯器把沒有初始化標記為警告,但C#編譯器把它當作錯誤來看待。

《隨筆十五》——C#的 “ C#的類定義介面定義遮蔽基類成員

目錄 C#中的類定義 介面的定義 遮蔽基類成員 基類訪問 C#中的類定義 class MyClass { //Members } ●   這樣定義一個類後,就可以在專案中能訪問該定義的其他位置對該類進行例項化。 在預設情況下,

Java宣告一個物件並NULL或者只宣告

其實這個問題可以當成宣告變數要不要賦初始值的問題,不管這個變數是基礎型別還是引用型別,只是基礎型別不能賦值NULL。 這裡要分兩種清況,成員變數或者區域性變數。給一個程式碼: class People{ private String name; private int a

C/C++字串常量為什麼可以給char*?

1、對於C來說,字串常量是由字元構成的陣列,比如“hello”型別為char[6],所以在C中可以直接字串常量賦值給char*。既然C中字串常量是是不是改變字串常量的值呢?答案是否定的,雖然可以編譯通過(會有警告),但是執行時會出錯。因為字串常量位於只讀儲存區不允許寫操作。實驗如下: #incl

C\C++宣告定義的區別

C語言是面向過程的,而C++是面向物件的 C和C++的區別: C是一個結構化語言,它的重點在於演算法和資料結構。C程式的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制)。 C++,首要考慮的是如何構造一個物件模型,讓這

C++整型的超範圍問題

在C++的標準中,是規定了每一個算術型別的最小儲存空間的,但是該標準並不阻止編譯器來使用更大的儲存空間,而且事實上也正好如此,對於C++ 的內建型別,幾乎所有的編譯器都使用了更大的儲存空間來儲存資料。---yyc 在C++中可以理解物件的型別決定了物件的取值範圍,但是當我們

C/C++,為什麼字串可以給字元指標變數,單引號雙引號的區別

本文是通過幾篇轉帖的文章整理而成的: http://www.slyar.com/blog/c-quotation-marks.html http://www.cnblogs.com/KingOfFreedom/archive/2012/12/07/2807223.html

C++讓人忽視的左

前言 為了瞭解C++11的新特性右值引用,不得不重新認識一下左右值。學習之初,最快的理解,莫過於望文生義了,右值那就是賦值號右邊的值,左值就是賦值號左邊的值。在中學的數學的學習中,我們理解的是,左值等價於等號左邊的值,右值等價於等號右邊的值;當我們繼續學習C語言時,等號=不再叫等號,蓋頭換面叫做

C++類的靜態成員& vs初始

C++靜態成員是類的行為而不是物件的行為 C++靜態成員的用途之一是統計有多少個物件實際存在 靜態成員的初始化:在類的外面 形式: 資料型別類名::靜態資料成員名=初值 賦值操作是在兩個已經存在的物件間進行的,而初始化是要建立一個新的物件,並且其初值來源

C++初始的區別

C++中, 對於簡單型別的賦值和初始化的區別基本可以忽略,但當涉及到類或者複雜的資料型別時,問題就變得不那麼簡單了。 class Point { public: Point(int a=0, int b=0):x(a), y(b){}; ~Point(); Poi

c語言變數初始

陣列變數為全域性變數,或被部分初始化,均會出現這種情況。 C語言中,變數在沒有顯式初始化時,區分變數型別,有如下幾種情況: 1 全域性變數, 和靜態區域性變數,未初始化時值預設為0.無論是陣列還是變數,都是如此。 2 區域性變數,初始值為隨機值。 3 陣列類區域性變數,當

字串初始

字串賦值與初始化 char cString[10]="hello world" 是初始化,合法。   char cString[10]; cString="hello world" 是賦值,這樣賦值非法。原因在於聲明瞭cStrin

Java-初始

賦值 賦值:是給變數指定一個值或者是改變一個變數的值。 int time = 60; variable = expression;//變數型別 變數名 = 表示式 public class TestJava { public static vo

有關QT宣告一個vector為全域性變數的初始問題

前面說了一個簡單的int型別全域性變數,是怎麼實現的,但是對於更復雜一點的vector型別,上面的方法固然可以借鑑,但是初始化的問題應該是不一樣的。 全域性變數:在標頭檔案的類中宣告,在cpp檔案的函

C++例項---虛基類的建構函式初始

執行環境:macOS shell 程式碼: #include <iostream> #include <iomanip> #include <string> using namespace std; class base

Effective C++筆記之一:宣告定義初始

一.宣告(Declaration)        區分宣告和定義可以讓C++支援分開編譯,宣告常常見於標頭檔案中。原始檔包含標頭檔案之後,就可以使用這個變數,即使沒有看到該變數的定義。 宣告的語法如下: extern int i; // object decl

宣告定義初始

變數的定義形式: 首先是型別說明符,隨後緊跟由一個或者多個變數名組成的類別,其中變數名以逗號隔開,最後以分號結束。 例子:int sum,value,unsold; struct GraphNode{     int label;     vect