(Translated by https://www.hiragana.jp/)
C++类 - 维基百科,自由的百科全书

C++ほどじょ设计まことほどじょ使用しよう(class)てい特定とくていほどじょちゅうてきかずすえ类型。这些すうすえ类型てき实例しょう对象 ,这些实例包含ほうがんほどじょ员定义的なり变量つねりょうなり员函すう,以及じゅう载的运算。语法じょう類似るいじCちゅう结构たい(struct)てき扩展,Cちゅう结构たい不能ふのう包含ほうがん函数かんすう以及じゅう载的运算

C 结构たいあずかC++ 类的对比

编辑

ざい C++ ちゅう结构たい よし关键词 struct てい义的一种数据类型[1]てきなり员和もと类默认为公有こうゆうてき(public)。よし关键词 class てい义的なり员和もと类默认为私有しゆうてき(private)。这是C++ちゅう结构たい类仅ゆうてき别。

聚合类

编辑

聚合类是一种没有用户定义的构造函数,ぼつゆう私有しゆう(private)かずたもつ护(protected)せい态数すえなり员,ぼつゆうもと类,ぼつゆうきょ函数かんすう[2]。这样てき类可以由ふう闭的だいくくごうよう逗号ぶんへだた开初はじめれつひょう[3]したれつてきだい码在 C C++ 具有ぐゆうしょうどうてき语法:

struct C
{
  int a;
  double b;
};

struct D
{
  int a; 
  double b;
  C c;
};

// initialize an object of type C with an initializer-list
C c = { 1, 2 };

// D has a sub-aggregate of type C. In such cases initializer-clauses can be nested
D d = { 10, 20, { 1, 2 } };

POD 结构

编辑

いちPOD结构普通ふつう旧式きゅうしきすうすえ结构)いち个不包含ほうがんPOD结构、POD联合(あるもの这些类型てきすう组)ある引用いんようてきせい态成员变りょうせい态成员没有限ゆうげんせい),并且ぼつ有用ゆうよう户定义的赋值运算析构てき聚合类。[1] いち个POD结构以说C structざいC++ちゅうてきとう价物。ざいだい多数たすうじょう况下,いち个POD结构拥有いち个在Cちゅう声明せいめいてき对应てき结构しょうどうまとないそんぬのきょく[4]いん此,POD结构ゆう时不正式せいしきしょう为“C风格结构”(C-style struct)。 [5]

C结构与C++ POD结构共有きょうゆうてき属性ぞくせい

编辑
  • かずすえなり员被分配ぶんぱい使とく一个对象中之后的成员有着更高的地址,じょまたがこしりょう一个访问描述符[6]
  • 两个POD结构类型ぬのきょくけんようてき如果它们ゆうしょうどう数量すうりょうてきせい态数すえなり员,而且对应てきせい态数すえなり员(按照顺序)ぬのきょくけんようてき[7]
  • いち个POD结构包含ほうがん命名めいめいてきはまたかし[8]
  • いち指向しこうPOD结构对象てきゆび针适あい使用しようreinterpret_cast指向しこう其初はじめなり员而且反またしか,说明ざいPOD结构てき头部存在そんざいはまたかし[8]
  • いち个POD结构以被offsetofひろし使用しよう[9]

声明せいめい使用しよう

编辑

C++ てき结构たい具有ぐゆう自己じこてきなり员。这些なり包括ほうかつ变量(包括ほうかつ其他结构たい类),做方法的ほうてき函数かんすう特定とくていてき标示あるじゅう载的运算),构造函数かんすう以及析构函数かんすうなり员被声明せいめいなり为公どもある私有しゆう使用しよう说明public:private:らい区分くぶん。说明きさき现的にんなんなり员会获得しょう应的访问权限ちょくいたしも一个说明符的出现。对于继承てき类能够使用しようprotected:说明

基本きほん声明せいめい和成かずなり员变りょう

编辑

类和结构たいてき声明せいめい使用しよう关键词classstructなり员在类和结构たいてき内部ないぶ声明せいめい

下面かめんてきだい码段实例りょう结构たい类的声明せいめい


struct person
{
  string name;
  int age;

};
class person
{
public:
  string name;
  int age;
};

以上いじょう两个声明せいめいざいこうのうじょうとう价的。まい一段代码都定义了一个类型person,其含有がんゆう两个なり员变りょうnameage注意ちゅういだいくくごうきさきめんてきぶんごう必需ひつじゅてき

ざい其中いち声明せいめいきさき不能ふのうどう使用しよう两个),person以被ようらいてい义新てきperson类型てき变量:

#include <iostream>
#include <string>
using namespace std;

class person
{
public:
  string name;
  int age;
};

int main ()
{
  person a, b;
  a.name = "Calvin";
  b.name = "Hobbes";
  a.age = 30;
  b.age = 20;
  cout << a.name << ": " << a.age << endl;
  cout << b.name << ": " << b.age << endl;
  return 0;
}

执行以上いじょうだい码将かい输出

Calvin: 30
Hobbes: 20

なり员函すう

编辑

なり员函すうC++ てき类和结构たいてきいち个重よう特性とくせい。这些すうすえ类型包含ほうがんさく为其なり员的函数かんすうなり员函すうふん为静态成员函すうあずかせい态成员函すうせい态成员函すうただのう访问该数すえ类型てき对象てきせい态成员。而非せい态成员函すうのう够访问对ぞうてき所有しょゆうなり员。ざいせい态成员函すうてき函数かんすう体内たいない,关键词this指向しこうりょう调用该函すうてき对象。这通常つうじょうどおり过thiscall调用协议,はた对象てきさく为隐含的だい一个参数传递给成员函数。[10]さいつぎ以之まえてきperson类型さく为例

class person
{
  std::string name;
  int age;
public:
  person() : age(5) { }
  void print() const;
};

void person::print() const
{
  cout << name << ";" << this->age << endl;
  /* "name""age"なり员变りょう
     "this"关键てき值是调用对象てき。其类がた
     const person*,原因げんいん该函すう声明せいめい为const。
  */
}

ざい上面うわつらてきれい子中こなかprint()函数かんすうざい类中声明せいめい,并在类的名称めいしょうきさきじょう::らい限定げんてい它后以定义。nameage私有しゆうてき(类的だま认修饰符),print()声明せいめい公有こうゆうゆかり于一个被用于类外的成员需要被申明为公有的。

つう使用しようなり员函すうprint(),输出以被简化为:

a.print();
b.print();

上述じょうじゅつてきabしょう为调ようしゃ(sender),とうprint()函数かんすう执行时每一个都引用自己的成员变量。 はた类或结构てきさるあきらしょう做接こうかずじょう义(しょうさく实现)いれぶん开的单元つね见的做法。よう需要じゅようてきせっこうにゅういち个头ぶんけんちゅう而实现则独立どくりつにゅうみなもとだい码或しゃ编译きさきてき形式けいしき

せい态成员函すう以用constあるvolatile关键词限定げんてい。const限定げんていてきなり员函すう不能ふのうおさむあらため其他すうすえなり员(じょりょう具有ぐゆうmutableてき例外れいがい),也不能ふのう调用const限定げんていてき其他なり员函すう。编译实现时,通常つうじょうざいconst限定げんていてきなり员函すう体内たいない,thisしょ指向しこうてきすうすえなり员自动具有ぐゆうconst限定げんていいん此是ただ读的。const对象ただのう调用constなり员函すう;volatile对象ただのう调用volatile限定げんていてきなり员函すうはんこれぼつゆう受到限定げんていてき普通ふつう对象以调よう所有しょゆうてきなり员函すう论它为cv限定げんてい。构造函数かんすう、析构函数かんすう不能ふのうcv限定げんてい

继承

编辑

POD类的ないそんぬのきょくぼつゆうC++标准规定。れい如,许多流行りゅうこうてきC++编译どおり过将ちち类的だん和子わこ类的だん并置らい实现单继承ただし这并标准しょ需求。这种ぬのきょくてき选择使とくはたちち类的ゆび指向しこう类的操作そうさ平凡へいぼんてき(trivial)。

れい如,こう虑:

class P 
{
    int x;
};
class C : public P 
{
    int y;
};

いちPてき实例P* p指向しこう它,ざいないそんちゅう可能かのうおこりらいぞう这样:

+----+
|P::x|
+----+
↑
p

いちCてき实例P* p指向しこう它,ざいないそんちゅう可能かのうおこりらいぞう这样:

+----+----+
|P::x|C::y|
+----+----+
↑
p

いん此,にんなんみさおP对象てきだんてきだい码都以操纵在C对象ちゅうてきPだん而不需要じゅようこう虑任なん关于Cだんてきてい义。一个正确书写的C++ほどじょ在任ざいにんなんじょう况下应该对被继承だんてきぬのきょくゆうにんなん假定かてい使用しようstatic_castあるものdynamic_cast类型转换运算かい确保ゆび针正确的从一个类型转换为另一个。

多重たじゅう继承并不么简单。如果いち个类D继承りょうP1P2么两个父类的だん需要じゅよう按照ぼう种顺じょそん储,ただしざいだい多数たすうじょう况下)ただゆう一个父类可以被放在子类的头部。まいとう编译需要じゅようしょういち指向しこうDてきゆび针转换为P1あるP2なかてきにんいち个,编译需要じゅよう提供ていきょう一个自动转换从子类的地址转换为父类字段的地址(典型てんけい,这是一个简单的偏移量计算)。

关于多重たじゅう继承てきさらしんいき参看さんかんきょ继承

じゅう载运さん

编辑

C++ようもとほどじょいんおもぼう運算うんざん目的もくてき補充ほじゅうちゅうのう提供ていきょうてきはりたい特定とくているいてき運算うんざんどう,很多じょうるい也因ため內建不能ふのう提供ていきょう指定してい運算うんざん需要じゅようおも

另外,とうほどしき設計せっけいぼつゆうおもある定義ていぎぼう運算うんざんへんやくかい自動じどう建立こんりゅう它們,れいさん法則ほうそくなかてき複製ふくせい指定してい運算うんざん=)。

あきら慣例かんれいじゅう運算うんざんおう模擬もぎ運算うんざん本身ほんみ意義いぎてきこうのうれい如重運算うんざん「*」ほどじょいん義務ぎむおもためりょうかず乘法じょうほうある其他,數學すうがくあるほどしきじょうてき意義いぎ)。另外,宣告せんこくいち結構けっこうintegerるいとうおも運算うんざん如「*」就要かいでんintegerるい

struct integer 
{
    int i;
    integer(int j = 0) : i(j) {}
    integer operator*(const integer &k) const 
    {
        return integer (i * k.i);
    }
};

ある

struct integer 
{
    int i;
   
    integer(int j = 0) : i(j) {}
 
    integer operator*(const integer &k) const;
};
 
integer integer::operator*(const integer &k) const 
{
    return integer(i * k.i);
}

ざい這裡,constせきかぎ出現しゅつげん兩次りょうじひょうたちしきconst integer &kなかてきconstせきかぎ代表だいひょう函數かんすう不能ふのうおさむあらため此常すう值,而第constせきかぎ代表だいひょう此函すうかいおさむあらためるい物件ぶっけん本身ほんみ*this)。

integer &kこれちゅう符號ふごう&表示ひょうじ參照さんしょう形式けいしきよびさけべとうよびさけべはこすうかい直接ちょくせつでん遞變すうなみ以變すう本身ほんみだい這裡てき變數へんすうk[11]

二元可重载运算符

编辑

二元にげん運算うんざんかいよう函數かんすう方式ほうしきなみ以「operator 運算うんざん識別しきべつらい進行しんこうおも,這裡てきさんすうかい單一たんいつさんすう實際じっさい使用しよう,二元運算符左方的變數會成為類物件本身(*this),而右かた變數へんすうそくなりためでんにゅうさんすう

integer a = 1; 
/* 這裡てき等號とうごう其中いちしゅもと運算うんざん
   わが們可利用りようおも運算うんざん(=)てき方式ほうしき
   らい提供ていきょうはつはじめこうのう,而左かたてき變數へんすうi
   就是るい物件ぶっけん本身ほんみみぎかたてき數字すうじ1のり
   でんにゅうさんすう。 */
integer b = 3;
/* 變數へんすう名字みょうじ跟類物件ぶっけん內的變數へんすう無關むせき */
integer k = a * b;
cout << k.i << endl;  //輸出ゆしゅつ3

以下いか二元可重載運算符列表:

算術さんじゅつ運算うんざん

運算うんざん名稱めいしょう 語法ごほう
加法かほう總和そうわ a + b
以加ほう a += b
減法げんぽう a - b
以減ほう a -= b
乘法じょうほうせき a * b
以乘ほう a *= b
除法じょほうぶん a / b
以除ほう a /= b
すうすう a % b
以模すう a %= b

比較ひかく運算うんざん

運算うんざん名稱めいしょう 語法ごほう
しょう a < b
しょう於或とう a <= b
だい a > b
だい於或とう a >= b
不等ふとう a != b
とう a == b
邏輯 AND a && b
邏輯 OR a || b

くらいもと運算うんざん

運算うんざん名稱めいしょう 語法ごほう
くらいもとひだりうつり a << b
以位もとひだりうつり a <<= b
くらいもとみぎうつり a >> b
以位もとみぎうつり a >>= b
くらいもとAND a & b
以位もとAND a &= b
くらいもとOR a | b
以位もとOR a |= b
くらいもとXOR a ^ b
以位もとXOR a ^= b

其它運算うんざん

運算うんざん名稱めいしょう 語法ごほう
基本きほん a = b
逗號 a , b

運算うんざん=以被用作ようさく值,意思いしはらじょうこうのうよしみぎかた變數へんすうしょううつし內部資料しりょういたひだりかた變數へんすうただし乎需よう也可以被用作ようさく其他用途ようと

まい運算うんざん互相獨立どくりつ存在そんざいなみ依賴いらい其他運算うんざんれい運算うんざん<なみ需要じゅよう運算うんざん>存在そんざいしたがえ而運さく

一元可重载运算符

编辑

一元いちげん運算うんざん上述じょうじゅつてき運算うんざん相似そうじただ一元運算符只會載入類物件本身(*this),而不接受せつじゅ其他さんすう。另外,一元運算符有分前置運算符和後置運算符,分別ふんべつざい於前おけ運算うんざんかいいた變數へんすう前方ぜんぽうおけ運算うんざんそく後方こうほうれい如負值運算うんざん-かず邏輯はん運算うんざん!いちげんまえおけ運算うんざん

以下いか一元可重載運算符列表:

算術さんじゅつ運算うんざん

運算うんざん名稱めいしょう 語法ごほう 類型るいけい 備注
いち元正がんしょうごう +a ぜんおけ
ぜんつづり遞增ていぞう ++a ぜんおけ せん1なみかいでん1てき
こうつづり遞增ていぞう a++ こうおけ 1ただしかいでん1まえてき
一元いちげん負號ふごうはん -a ぜんおけ
ぜんつづり遞減ていげん --a ぜんおけ さきげん1なみかいでんげん1てき
こうつづり遞減ていげん a-- こうおけ げん1ただしかいでんげん1まえてき

比較ひかく運算うんざん

運算うんざん名稱めいしょう 語法ごほう 類型るいけい
邏輯はん !a ぜんおけ

くらいもと運算うんざん

運算うんざん名稱めいしょう 語法ごほう 類型るいけい
くらいもといちてき補數ほすう ~a ぜんおけ

其它運算うんざん

運算うんざん名稱めいしょう 語法ごほう 類型るいけい
間接かんせつこうした參考さんこう *a ぜんおけ
まと參考さんこう &a ぜんおけ
轉換てんかん (type) a ぜんおけ

じゅう一元運算符時有區分前置和後置式,一元前置運算符按以下格式編寫:

かいでん資料しりょうがたたい operator 運算うんざん ()

而後おけ運算うんざん按以格式かくしきへんうつし

かいでん資料しりょうがたたい operator 運算うんざん (さんすう)

くくごうじゅう

编辑

くくごう運算うんざんゆうりょうたね分別ふんべつ方形ほうけいくくごう運算うんざん[]かず圓形えんけいくくごう運算うんざん())。方形ほうけいくくごう運算うんざんまためい陣列じんれつ運算うんざんただのうでんにゅう單一たんいつさんすう,而圓がたくくごう運算うんざん卻可以傳にゅう任意にんい數量すうりょうてきさんすう

方形ほうけいくくごう運算うんざん按以格式かくしきおも

かいでん資料しりょうがたたい operator[] (さんすう)

圓形えんけいくくごう運算うんざん按以格式かくしきおも

かいでん資料しりょうがたたい operator() (まいりすう1, まいりすう2, ...)

注意ちゅういまいりすう指定していざいだい二個括號之中,だい一個括號只是運算符符號。

构造函数かんすう

编辑

ゆう时软けん工程こうてい师会おもえよう们的变量ざい声明せいめい时有いち个默认值。这可以通过声明せいめい构造函数かんすう做到。

person(string N, int A) 
{
    name = N;
    age = A;
}

なり员变りょう以像下面かめんてきれいいち样,利用りよういち个冒ごうつう过一个初始化序列初始化。这与上面うわつら不同ふどう,它进ぎょうりょうはつはじめ使用しよう构造函数かんすう),而不使用しよう赋值运算。这对类类がたらい说更有效ゆうこういん为它ただ需要じゅよう直接ちょくせつ构造;而赋值时,它们必须さき使用しようだま认构づくり函数かんすう进行だいいちはつはじめしかきさきさい赋予一个不同的值。而且いち些类がたれい引用いんようconst类型)不能ふのう赋值,いん而必须通过初はじめ序列じょれつ进行はつはじめ

person(std::string N, int A) : name(N), age(A) {}

注意ちゅういはなくくごう不能ふのう省略しょうりゃくそく使つかい为里めん为空。

だま认值以给さいきさきてき几个さんすう类帮じょはつはじめだま认值。

person(std::string N = "", int A = 0) : name(N), age(A) {}

ざい上面うわつらてきれい子中こなかとうぼつゆうさんすう给予构造函数かんすう时,とう价于调用以下いかてき无参构造函数かんすう(一个默认构造函数):

person() : name(""), age(0) {}

构造函数かんすうてき声明せいめいおこりらいぞう一个名字和数据类型相同的函数。こと实上,わが们的确可以用函数かんすう调用てき形式けいしき调用构造函数かんすうざい这种じょう况下いちperson类型てき变量かいなり为返かい值:

int main() 
{
    person r = person("Wales", 40);
    r.print();
}

以上いじょうてきれい创建りょういち个临时的person对象,しかきさき使用しよう复制构造函数かんすうはた其赋r。一个更好的创建对象的方式(ぼつゆう需要じゅようてき拷贝):

int main() 
{
    person r ("Wales", 40);
    r.print ();
}

具体ぐたいてきほどじょぎょう为,以也不和ふわ变量ゆう关系,以被さく为一部分ぶぶん加入かにゅう构造函数かんすう

person() 
{
    std::cout << "Hello!" << endl;
}

つう过以じょうてき构造函数かんすうとういちperson变量ぼつゆう具体ぐたいてき值初はじめ时,“Hello!”かいしるし

だま认构づくり函数かんすう

编辑

とう类没有定ありさだ义构づくり函数かんすう时,だま认构づくり函数かんすうはた调用。

class A { int b;};
//使用しようくくごう创建对象
A *a = new A(); //调用だま认构づくり函数かんすう,bかいはつはじめ为'0'
//使用しようくくごう创建对象
A *a = new A; //仅分配ぶんぱいないそん调用だま认构づくり函数かんすう,bかいゆう一个未知值

しか而如はてよう户定义了这个类的构造函数かんすう,两个声明せいめい都会とかい调用よう户定义的构造函数かんすう。而在よう户定义的构造函数かんすうちゅうてきだい码会执行,并且かい赋予bだま认值。

析构函数かんすう

编辑

一个析构函数是一个构造函数的逆,とう一个类的一个实例被销毁时会被调用,れい如当いち个类ざい块(一组花括号“{}”)ちゅう构造てき一个对象会在关闭括号后删除,これきさき析构函数かんすう动调よう。它会ざいきよしそら保存ほぞん变量てきないそん位置いち时被调用。析构函数かんすう以在类被销毁时用らい释放资源,れい如堆分配ぶんぱいてきないそん开的ぶんけん

声明せいめい一个析构函数的符号类似于构造函数。它没ゆうかえしかい值而且方法的ほうてき名称めいしょうざい类的名称めいしょうぜんじょう波浪はろう线(~)あいどう

~person() 
{
    cout << "I'm deleting " << name << " with age " << age << endl;
}

另外要注意ようちゅういてき,析構函數かんすうようもとさんすうでん遞。しか而,あずか構造こうぞう函數かんすういちよう,析構函數かんすう以被あらわしき調ちょうよう

int main() 
{
    person someone("Wales", 40);
    someone.~person();  //此時かい輸出ゆしゅついち"I'm deleting Wales with age 40"

    return 0;  //だい輸出ゆしゅつ"I'm deleting  with age 40"
}
/* ざい這裡,ほどしき結束けっそくかい自動じどう調ちょうよう析構函數かんすう
   而person.nameざいだい一次調用析構函數時已被清除,
   ただしperson.ageかい按編やく而定,
   ぼつのうざいだい一次調用析構函數時清零。 */

构造函数かんすうあずか析构函数かんすうてき相似そうじてん

编辑
  • 兩者りょうしゃ都和つわ聲明せいめい所在しょざいてき類別るいべつゆうしょうどうてき名字みょうじ
  • わか宣告せんこく兩者りょうしゃ都會とかい執行しっこうあずかしつらえてき行為こういそく類別るいべつざい建立こんりゅうある刪除かい一同分配或刪除記憶體。
  • たい衍生類別るいべつsubclass)而言,ざい基礎きそ類別るいべつsuperclassてきけん構函しき執行しっこう期間きかん,衍生類別るいべつてきけん構函しきかえ執行しっこうはんこれざい基礎きそ類別るいべつてきかい構函しき執行しっこう期間きかん,衍生類別るいべつてきかい構函しきやめ執行しっこうかん畢。りょうたね情況じょうきょう無法むほう使用しようざい衍生類別るいべつ宣告せんこくてき變數へんすう

类模ばん

编辑

类模ばん对一批仅仅成员数据类型不同的类的抽象,ほどじょ员只よう为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生きすぎしげる具体ぐたいてき类,这类以看さく类模いたてき实例,从而だいだいひさげだか编程てき效率こうりつ

属性ぞくせい

编辑

C++语法试图使一个结构的所有方面看起来像一个基本きほんすうすえ类型よし此,运算じゅう载允许结构像整数せいすう浮点すういち操作そうさ,结构てきかず以通过方くくごう声明せいめいsome_structure variable_name[size]),而且指向しこう结构てきゆび针可以通过和指向しこうないおけ类型てきゆび通用つうようてき方法ほうほうかい引用いんよう

うちそん消耗しょうもう

编辑

结构てきないそん消耗しょうもういたりしょう组成变量てきないそん大小だいしょうてき总和。参考さんこう如下twonums 结构れい

struct twonums 
{
    int a;
    int b;
};

这个结构包含ほうがん两个せいがたざいとうぜん许多 C++ 编译ちゅうせいがただまこれ32 せいがた所以ゆえんごと个成员变りょう消耗しょうもう 4 个字节的ないそんよし而整个结构至しょうあるものせいこのみ消耗しょうもう 8 个字节的ないそん,见下图。

+----+----+
| a  | b  |
+----+----+

しか而,编译可能かのうざい变量あるもの结构てき结尾添加てんかそらてき, 这样以保证和给定てき计算つくえ结构ひきはい通常つうじょうこれ变量添加てんかいた 32 。如下れいしょしめせてき结构:

struct bytes_and_such
{ 
   char c;
   char C;
   short int s;
   int i;
   double d;
};

なり

+-+-+--+--+--+--+--------+
|c|C|XX|s |  i  |   d    |
+-+-+--+--+--+--+--------+

ざいないそんちゅう, XX 表示ひょうじ两个使用しようてき空位くういもと

いん为结构可能会のうかい使用しようゆび针和すう组去声明せいめい あるものはつはじめ变量,结构てきないそん消耗しょうもう一定いってい固定こていてき。另外一个内存消耗不固定的例子是模板结构。

くらいだん

编辑

くらいだん(Bit field)以被ようらいてい义比ないおけ类型还要しょうてき类成员变りょうつう过这个字だんてい义的变量,ただ以像使用しようないおけてき整数せいすう类型(れい如int, char, short, long...)样子使用しよう

struct A
{ 
	unsigned a:2; // 以存储0-3てき数字すうじうらないすえいち个intぜん2 bitてきそら间.
	unsigned b:3; // 以存储0-7てき数字すうじうらないすえきさき3 bitてきそら间.
	unsigned :0;  // うつり动到一个内置类型的末尾
	unsigned c:2; 
	unsigned :4;  // ざいcdちゅう间加4bitてき空白くうはく
	unsigned d:1;
	unsigned e:3;
};

// うちそん结构
/*	4 byte int   4 byte int
	[1][2][3][4] [5][6][7][8]
	[1]                   [2]              [3]              [4]
	[a][a][b][b][b][][][] [][][][][][][][] [][][][][][][][] [][][][][][][][]

	[5]                  [6]                [7]              [8]
	[c][c][][][][][d][e] [e][e][][][][][][] [][][][][][][][] [][][][][][][][]
*/

くらいだん不能ふのうざい结构たいちゅう使用しよう,它只のうざい使用しようstructあるものclass关键てい义的类中使用しよう

引用いんよう传参

编辑

this关键

编辑
complex& operator+=(const complex & c) 
{
    realPart += c.realPart;
    imagPart += c.imagPart;
    return *this;
}

まいり

编辑

參考さんこう

编辑
  1. ^ 1.0 1.1 ISO/IEC (2003). ISO/IEC 14882:2003(E): Programming Languages - C++ §9 Classes [class] para. 4
  2. ^ ISO/IEC (2003). ISO/IEC 14882:2003(E): Programming Languages - C++ §8.5.1 Aggregates [dcl.init.aggr] para. 1
  3. ^ ISO/IEC (2003). ISO/IEC 14882:2003(E): Programming Languages - C++ §8.5.1 Aggregates [dcl.init.aggr] para. 2
  4. ^ What's this "POD" thing in C++ I keep hearing about?. Comeau Computing. [2009-01-20]. (原始げんし内容ないようそん档于2009-01-19). 
  5. ^ Henricson, Mats; Nyquist, Erik. Industrial Strength C++. Prentice Hall. 1997. ISBN 0-13-120965-5. 
  6. ^ ISO/IEC (2003). ISO/IEC 14882:2003(E): Programming Languages - C++ §9.2 Class members [class.mem] para. 12
  7. ^ ISO/IEC (2003). ISO/IEC 14882:2003(E): Programming Languages - C++ §9.2 Class members [class.mem] para. 14
  8. ^ 8.0 8.1 ISO/IEC (2003). ISO/IEC 14882:2003(E): Programming Languages - C++ §9.2 Class members [class.mem] para. 17
  9. ^ ISO/IEC (2003). ISO/IEC 14882:2003(E): Programming Languages - C++ §18.1 Types [lib.support.types] para. 5
  10. ^ thiscall (C++). [2009-01-26]. (原始げんし内容ないようそん于2008-12-10). 
  11. ^ integer *k不同ふどう使用しよう符號ふごう(*)ただかいでん遞變すう,而且ただのう利用りよう變數へんすう操作そうさ變數へんすう本身ほんみ

資料しりょうらいげん

编辑