C++中類的四種建構函式
建構函式又分為4大類: 1、無引數建構函式 2、有引數建構函式 3、賦值建構函式(copy建構函式) 4、預設建構函式
class test
{
public:
test()
{
m_a =1; m_b =2;
cout <<"這是無引數建構函式"<< endl;
}
test(int a)
{
m_a = a;
cout <<"這是有一個引數建構函式"<< endl;
}
test(int a,int b)
{
m_a = a; m_b = b;
cout <<"這是有兩個引數建構函式"<< endl;
}
test (const test& obj)
{
m_a = obj.m_a;
m_b = obj.m_b;
cout <<"這是賦值建構函式"<< endl;
}
private:
int m_a;
int m_b;
};
無參建構函式呼叫:
void main()
{
test t1;//此時在建立t1物件時,自動呼叫無引數建構函式
}
有參建構函式的呼叫:有三種方式
void main()
{
//第一種:這種方法不限制引數數量
test t2(7,8);
test t3(10);
//第二種:使用等號賦值的方式進行初始化
//只使用於一個引數的建構函式
test t4 =(5, 6,7,8);//無論括號裡面寫多少數,這個逗號表示式的值就是最後一個數
//test t4=(5, 6, 7, 8);等價於 teat t4=8;
//第三種:程式設計師手工呼叫建構函式,產生一個物件 直接用建構函式法 test t5=test(20); //產生一個匿名物件,轉成t5;,類似於賦值建構函式中的第四種}
賦值建構函式(copy建構函式):有四種方式呼叫賦值建構函式,用一個物件去初始化另外一個物件 賦值操作和初始化是兩個不同的概念
第一種呼叫方法
void main()
{
test t1(4,5);
test t0;
t0 = t1;//用t1給t0賦值 此時沒有呼叫賦值建構函式
//賦值操作和初始化是兩個不同的概念
//第一種呼叫方法
test t2 = t1;//用t1來初始化t2 此時是呼叫了賦值建構函式
}
第二種呼叫方法
void main()
{
test t1(4,5);
test t2(t1);//這種呼叫形式和複製建構函式的函式宣告更為接近
//也是用t1 來初始化t2
}
第三種呼叫方法
void f(test p)
{
//當這個函式被呼叫時,由於要對形參初始化,則用實參對其初始化
//此時會呼叫test類的賦值建構函式
cout <<"此處實參賦值給形參,會呼叫賦值建構函式"<< endl;
}//當該函式執行完畢後,會自動析構p,呼叫解構函式
void palyobj()
{
test t0(1,2);
test t1 = t0;//這是第一種呼叫賦值建構函式的方法
cout <<"t1已經初始化完畢"<< endl;
f(t1);
//實參賦值給形參時,會呼叫第三種 賦值建構函式
//當該函式執行完畢以後,先析構t1,在析構t0,先定義的後析構
}
void main()
{
palyobj();
system("pause");
}
第四種呼叫方法test g()
{//函式返回匿名物件
test A(2,3);
return A;
//return A 時編譯器執行的步驟是,先執行賦值建構函式,
//將A初始化給一個匿名物件,然後再把A析構掉,只剩下匿名物件
}
void play2()
{
test B;
//若返回的匿名物件,賦值給另外一個同類型的物件,那麼匿名物件會被析構
B = g();//用匿名物件賦值給B物件,然後匿名物件析構
//若返回的匿名物件,來初始化另外一個同類型的物件,
//那麼匿名物件會直接轉成新的物件
test C=g();
cout <<"函式返回物件初始化另一物件,那麼匿名物件會直接轉成新的物件"<< endl;
}
void main()
{
play2();
system("pause");
}
匿名物件的去和留,主要看你怎麼接它,如果不接則直接析構,若給其他物件賦值,則賦值以後會被析構,若給其他物件初始化,則直接轉化成新的物件(此時不會再呼叫賦值建構函式)。
預設建構函式
兩個預設建構函式
1、預設無參建構函式
當類中沒有定義建構函式時,編譯器預設提供一個無參建構函式,並且其函式體為空
2、預設拷貝函式
當類中沒有定義拷貝建構函式時,編譯器預設提供一個預設拷貝建構函式,簡單的進行成員變數的值的賦值建構函式呼叫規則: 當類中程式設計師自己定義了任何一種建構函式(有參建構函式和賦值建構函式),編譯器都不會再提供無參建構函式 就是說,如果你只定義了有參建構函式,那就不能單純的只寫
test t1;//這麼寫是會報錯的,找不到可用的建構函式,
//因為此時,編譯器沒有替你自動建立一個預設得無參建構函式
建構函式又分為4大類:
1、無引數建構函式
2、有引數建構函式
3、賦值建構函式(copy建構函式)
4、預設建構函式
class test
{
public:
test()
{
m_a =1; m_b =2;
cout <<"這是無引數建構函式"<< endl;
}
test(int a)
{
m_a = a;
cout <<"這是有一個引數建構函式"<< endl;
}
test(int a,int b)
{
m_a = a; m_b = b;
cout <<"這是有兩個引數建構函式"<< endl;
}
test(const test& obj)
{
m_a = obj.m_a;
m_b = obj.m_b;
cout <<"這是賦值建構函式"<< endl;
}
private:
int m_a;
int m_b;
};
無參建構函式呼叫:
void main()
{
test t1;//此時在建立t1物件時,自動呼叫無引數建構函式
}
有參建構函式的呼叫:有三種方式
void main()
{
//第一種:這種方法不限制引數數量
相關推薦
淺談C++中的幾種建構函式
3月中旬參加宣講會,做了X軟公司的C++筆試題,裡面有一道“預設拷貝建構函式的題”,由於好久沒複習C++基礎知識,當時連基本的概念都想不來了了。於是乎,開始拿起以前看的譚浩強C++複習起來,現在書快要要啃完了,覺得收穫頗多。好比練武功,祕籍雖然重要,但更重要的還
C++中的幾種建構函式
看了大神的部落格,感覺很厲害,果斷轉了
C++中的建構函式
C++中的建構函式可以分為4類:
(1)預設建構函式。以Student類為例,預設建構函式的原型為
Student();//沒有引數
(2)初始化建構函式
Student(int num,int age)
C++中類的拷貝建構函式的引數型別必須是引用解惑。
在C++中, 建構函式,拷貝建構函式,解構函式和賦值函式(賦值運算子過載)是最基本不過的需要掌握的知識。 但是如果我問你“拷貝建構函式的引數為什麼必須使用引用型別?”這個問題, 你會怎麼回答? 或許你會回答為了減少一次記憶體拷貝? 很慚愧的是,我的第一感覺也是這麼回
C++中類的四種建構函式
建構函式又分為4大類:
1、無引數建構函式
2、有引數建構函式
3、賦值建構函式(copy建構函式)
4、預設建構函式
class test{public: test(){ m_a =1
C++的四種建構函式
預設建構函式和初始化建構函式:
拷貝建構函式:複製建構函式用於複製本類的物件。
預設複製建構函式:
Student(Student &b)
{
this.x=b.x;
this.y=b.y;
}
將一個已存在的物件b,賦值給呼叫該複製建構函式的物
C++中struct也有建構函式與解構函式,也可以有訪問型別控制以及結構體大小,類大小
C++中struct也有建構函式與解構函式,也可以有訪問型別控制,可以用private關鍵字。如下所示:
#include <iostream>
struct point
{
public:
point():x_(0.0),y_(0.0
Csharp中Thread的四種建構函式
帶引數的建構函式
第一種:Thread(ParameterizedThreadStart)
private void treeView1_NodeMouseClick()
{
try
{
1、【C++】類&物件/建構函式/拷貝建構函式/操作符過載/解構函式
一、C++類 & 物件
C++ 在 C 語言的基礎上增加了面向物件程式設計,C++ 支援面向物件程式設計。類是 C++ 的核心特性,通常被稱為使用者定義的型別。
類用於指定物件的形式,它包含了資料表示法和用於處理資料的方法。類中的資料和方法稱為類的成員。函式在
c++中類物件直接作為函式引數所引起的問題。
這兩天在寫一個視訊轉換的程式,將H263/264編碼的視訊封裝成mov格式,用c++實現。
Wiki上說Apple的mov格式是典型的over engineering,設計的非常複雜,各種資訊使用atom原子封裝,一個atom裡面遞迴地巢狀著另外一個atom,atom的種類
C++中的顯式建構函式
有如下一個簡單的複數類:
class ClxComplex{public: ClxComplex(double dReal =0.0, double dImage =0.0) { m_dReal = dReal; dImage = dImage; } d
C++中的四種強制型別轉換的區別
使用標準C++的型別轉換符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。
1 static_cast
用法:static_cast < type-id > ( expression
C++中如何在一個建構函式中呼叫另一個建構函式
http://blog.chinaunix.net/uid-23741326-id-3385581.html
在C++中,一個類的建構函式沒法直接呼叫另一個建構函式,比如:
點選(此處)摺疊或開啟
#ifndef _A_H_
#define _A_H_
#i
C++中的四種強轉型別
在C++中一共有四種強轉型別分別為:static_cast,const_cast,reinterpret_cast和dynamic_cast
型別轉換的一般形式為:cast-name<type&
c++編寫類String的建構函式、解構函式和賦值函式
C++程式碼
按 Ctrl+C 複製程式碼
class String
{
public:
String(const char *str = NULL);// 普通建構函式 String(const String &other);
關於QT/C++中explicit關鍵字和建構函式的*parent引數的簡單說明
文章僅僅是用來說明一下一個引數的作用
程式寫的多了,你會發現幾乎所有的Qt類的建構函式都會有一個parent引數。這個引數通常是QObject* 或者是 QWidget* 型別的(定義新的類是通常首先初始化為0,在類的實現函式中賦值)。很多情況下它都會有一個初始值0,因此,即便你不去給它複製也沒有絲毫的問
c++中類的預設四個成員函式介紹(建構函式+拷貝構造+解構函式+賦值運算子過載函式)
在C++中,類的6個預設的成員函式包括:
建構函式、解構函式、拷貝建構函式、賦值運算子過載函式、取地址操作符過載、const修飾的取地址操作符過載。
本文將主要介紹前四個成員函式:
一、建構函式
在c++程式中,物件的初始化時一個不可缺少且十分重要的
C++中類的建構函式與複製建構函式
1 相關定義
1.1 建構函式
建構函式是類的特殊的成員函式,只要建立類型別的新物件,都要執行建構函式。建構函式的工作是保證每個物件的資料成員具有合適的初始值。建構函式的名字與類的名字相同,並且不能指定返回型別。像其他任何函式一樣,它們可以沒有形參,也可以定義多個形參。
1
C++中類的組合與建構函式
首先看看建構函式的概念。在程式執行過程中,當遇到物件宣告語句時,程式會想作業系統申請一定的記憶體空間用於存放新建的物件。而編譯器不知道如何產生程式碼來實現初始化。所以C++做了一套物件初始化的機制,就是建構函式。
然後是類的組合中,當建立類的物件時,如果這個類
C++中類的建構函式
建構函式:
1.定義:是一個特殊的成員函式,名字與類名相同,建立類型別物件時,由編譯器自動呼叫,在物件的生命週期內只且只調用一次,以保證每個資料成員都有一個合適的初值。如:
class Data
{
public:
Data(int year,int month,int
【C++】三種呼叫類的複製建構函式的情況
用類的一個物件初始化同類的另一個物件時。
某函式的返回值是類的物件,呼叫該函式時。
某函式的形參是類的物件,呼叫該函式時。
※注意區分“初始化”和“賦值”:
ClassName c2 = c1; (初始化語句)
ClassName c1 , c2;