構造和析構!
阿新 • • 發佈:2017-09-21
ons class ret play sin code src log 編譯器
一般而言,所有的對象都需要一個確定的初始狀態!
C++中的類可以定義與類名相同的特殊成員函數,這種類名相同的成員函數叫做構造函數,構造函數在定義時可以有參數,但是沒有任何返回類型的聲明(和返回void是兩個概念)。
構造函數的調用:一般情況下C++編譯器自動調用構造函數
#include <iostream> using namespace std; class Test { private: int i,j,k; public: Test(int v) { i = j = k = v; } void print() { printf(View Code"i = %d,j = %d,k = %d\n",i,j,k); } }; int main() { Test t1(4);//自動調用構造函數 Test t2 = 5;//自動調用構造函數 Test t3 = Test(6);//主動調用構造函數 t1.print(); t2.print(); t3.print(); Test tA[3] = {Test(1),Test(2),Test(3)};//主動調用構造函數 for(int i=0;i<3;i++) { tA[i].print(); }return 0; }
兩個特殊的構造函數:拷貝構造函數和默認構造函數
無參構造函數:當類中沒有定義任何一個構造函數,C++編譯器會為我們提供無參構造函數和拷貝構造函數。默認構造函數為空什麽都不做
拷貝構造函數:當類中定義了任意的非拷貝構造函數是,C++編譯器就不會提供無參構造函數了,會為我們提供拷貝構造函數。默認拷貝構造函數會對成員變量一 一復制。
#include <iostream> using namespace std; class Test { private: public: Test(const Test& v)//拷貝構造函數View Code{ printf("Test(const Test& v)\n"); } Test()//默認構造函數 { printf("Test()\n"); } }; int main() { Test t1; Test t2 = t1; return 0; }
構造和析構!