麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

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++技術專題專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 在线观看精品视频 | 欧美成人精品不卡视频在线观看 | 成人在线视频黄色 | 一级在线免费观看视频 | 精品久久久久久久久亚洲 | 午夜精品久久久久久久96蜜桃 | 成人不卡一区二区 | 久久精品日韩一区 | 国产一区二区三区在线观看视频 | 国产一区二区久久精品 | 欧美性受xxxx白人性爽 | 欧美18—19sex性护士中国 | 污版视频在线观看 | 国产精品三级a三级三级午夜 | 精品国产一区二区三区在线 | 亚洲一区在线免费视频 | 海外中文字幕在线观看 | 日日鲁夜夜视频热线播放 | 日本在线不卡一区二区三区 | 国产精品999在线观看 | 久草视频福利在线观看 | 操你啦免费视频 | 久啪视频 | 欧美aⅴ视频 | 免费在线观看成人网 | 国产免费视频在线 | 在线播放黄色网址 | 性盈盈盈影院 | 九九精品视频免费 | 精品久久久久久中文字幕 | 欧美一级电影网 | 久久久久中文字幕 | 精品国产一区二区久久 | 99热草| 中文字幕在线观看成人 | 色综合一区二区 | 国产精品久久久久久久不卡 | 二级大黄大片高清在线视频 | 在线a亚洲视频播放在线观看 | 羞羞色院91精品网站 | 欧美自拍三区 |