国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C++子對象和堆對象

2019-11-17 05:10:24
字體:
來源:轉載
供稿:網友
  子對象

  當一個類的成員是某一個類的對象時,該對象就為子對象。子對象實際就是對象成員。如:

class A
{
 public:
  …
 PRivate:
  …
};
class B
 {
  public:
   …
  private:
   A a;
   …
 };

  其中,B類中成員a就是子對象,它是A類的對象作為B類的成員。

  在類中出現了子對象或稱對象成員時,該類的構造函數要包含對子對象的初始化,通常采用成員初始化表的方法來初始化子對象。在成員初始化表中包含對子對象的初始化和對類中其他成員的初始化。下面舉一例子說明成員初始化的構造。

#include

class A
{
public:
A(int i, int j) { A1=i; A2=j; }
void print() { cout< private:
int A1, A2;
};

class B
{
public:
B(int i, int j, int k):a(i, j), b(k)
{
}
void print();
private:
A a; file://子對象
int b;
};

void B::print()
{
a.print();
cout< }

void main()
{
B b(6, 7, 8);
b.print();
}

  該程序的輸出結果為:

  6,7
  8

  其中,a(i, j), b(k)是成員初始化表,它有二項,前一項是給子對象a初始化,其格式如下:

   <子對象名> (<參數表>)

  后一項是給類B的數據成員b初始化。這一項也可以寫在構造函數的函數體內,使用賦值表達式語句

   b = k;

  給類B的數據成員初始化。 更多文章 更多內容請看C/C++技術專題專題,或
  堆對象

  所謂堆對象是指在程序運行過程中根據需要隨時可以建立或刪除的對象。這種堆對象被創建在內存一些空閑的存儲單元中,這些存儲單元被稱為堆。它們可以被創建的堆對象占有,也可以通過刪除堆對象而獲得釋放。

  創建或刪除堆對象時,需要如下兩個運算符:

   new

   delete

  這兩個運算符又稱為動態分配內存空間運算符。new相當于C語言中malloc()函數,而delete相當于C語言中free()函數。

  1. 運算符new的用法

  該運算符的功能是用來創建堆對象,或者說,它是用來動態地創建對象。

  new運算符使用格式如下:

  new <類型說明符> (<初始值列表>)

  它表明在堆中建立一個由<類型說明符>給定的類型的對象,并且由括號中的<初始值列表>給出被創建對象的初始值。假如省去括號和括號中的初始值,則被創建的對象選用缺省值。

  使用new運算符創建對象時,它可以根據其參數來選擇適當的構造函數,它不用sizeof來計算對象所占的字節數,而可以計算其大小。

  new運算符返回一個指針,指針類型將與new所分配對象相匹配,假如不匹配可以通過強制類型的方法,否則將出現編譯錯。

  假如new運算符不能分配到所需要的內存,它將返回0,這時的指針為空指針。

  運算符new也可以用來創建數組類型的對象,即對象數組。其格式如下:

   new <類名> [<算術表達式>]

  其中,<算術表達式>的值為所創建的對象數組的大小。如:

   A *ptr;
   ptr = new A[5];

  new還可用來創建一般類型的數組。如:

   int *p;
   p = new int[10];

  使用new[]創建的對象數組或一般數組時,不能為該數組指定初始值,其初始值為缺省值。

  2. 運算符delete的用法

  該運算符的功能是用來刪除使用new創建的對象或一般類型的指針。其格式如下:

   delete <指針名>

  例如:

   A *ptr;
   ptr = new A(5, 6);
   delete ptr;

  運算符delete也可用來刪除使用new創建對象數組,其使用格式如下:

   delete[] <指針名>

  同樣,delete也可以刪除由new創建的一般類型的數組。如:

   int *p;
   p = new int[10];
   delete[] p;

  使用運算符delete時,應注重如下幾點:

   (1) 它必須使用于由運算符new返回的指針;

   (2) 該運算符也適用于空指針(即其值為0的指針);

   (3) 指針名前只用一對方括號符,并且不管所刪除數組的維數,忽略方括號內的任何數字。

  下面舉一例子說明new運算符和delete運算符的使用方法。


#include

class AA
{
public:
AA(int i, int j)
{
A=i; B=j;
cout<<"構造函數./n";
}
~AA() { cout<<"析構函數./n"; }
void print();
private:
int A, B;
};

void AA::print()
{
cout< }

void main()
{
AA *a1, *a2;
a1 = new AA(1, 2);
a2 = new AA(5, 6);
a1->print();
a2->print();
delete a1;
delete a2;
}

   該程序的輸出結果為:

    構造函數.
    構造函數.
    1, 2
    5, 6
    構造函數.
    構造函數.

  從程序中可以看到:用new創建對象時,要調用構造函數,用delete刪除對象時,要調用析構函數。假如創建或刪除的時對象數組,對象數組有多少,就調用多少次構造函數或構造函數。

  在實際應用中,經常對于new運算符返回的指針進行檢驗,看是否分配了有效的內存空間。結合本例給出檢驗方法如下:

  if (!a1)
   {
    cout<<"Heap erroe!/n";
    exit(1);
   }

  下面再舉一個使用new和delete運算符對一般指針和數組的例子。

#include
#include

void fun()
{
int *p;
if (p = new int)
{
*p = 5;
cout<<*p< delete p;
}
else
cout<<"Heap error!/n";
}

void main()
{
fun();
int *pa;
pa = new int[5];
if (!pa)
{
cout<<"Heap error!/n";
exit(1);
}
for (int i=0; i<5; i++)
pa[i] = i+1;
for (i=0; i<5; i++)
cout<<pa[i]<<" ";
cout< delete[] pa;
}
更多文章 更多內容請看C/C++技術專題專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遂川县| 仪征市| 儋州市| 英山县| 张掖市| 富锦市| 江西省| 临沂市| 静宁县| 台湾省| 哈密市| 邓州市| 安多县| 乾安县| 沂水县| 洮南市| 陵水| 百色市| 广河县| 德保县| 临沭县| 白河县| 象州县| 察隅县| 侯马市| 铜陵市| 浠水县| 自治县| 昌平区| 伊金霍洛旗| 曲靖市| 云浮市| 柳州市| 三门县| 翁牛特旗| 镇远县| 罗平县| 盐亭县| 新乐市| 泰顺县| 丹江口市|