0

OOP を学習しようとしていますが、次のプログラムを理解するのに問題があります。

#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;

class A
{
public:
    A(int i) : m(i){}

    friend class B;

    friend void g_afiseaza_m();
private:
    int m;
};

class B
{
public:
    void afiseaza_m()
    {
        A a(250);
        cout<<"clasa B este prietena cu clasa A"<<endl<<" poate accesa membrul privat A::m"<<endl<<a.m<<endl;
    }
};

void g_afiseaza_m()
{
    A a(300);
    cout<<"functia g_afiseaza_m nu este un membru al clasei A dar este prieten"<<endl<<"poate accesa membrul privat A::m"<<endl<<a.m<<endl;
}

int main()
{
    B b;
    b.afiseaza_m();
    g_afiseaza_m();
    getch();
    return 0;
}

public:A(int i) :m(i){} private: int m という行が何をするのか教えてください。A が int パラメーター i を持つコンストラクターであり、 m がクラス A のプライベート メンバーであることは理解していますが、 m(i) とは何か理解できません。これは構文の問題ですか?

4

3 に答える 3

6

m(i)コンストラクターの は、メンバーを value で初期化しmますi

あなたの例は、同じ結果(動作ではない)を持っています

A(int i) {
    m = i;
}

あなたの例のように初期化子リストを使用してメンバーを初期化すると、メンバーのコンストラクターがパラメーターiで直接呼び出されるため、より効率的です。上記の例では、空のコンストラクターmが呼び出されてからvalue mが割り当てられますi

于 2012-11-01T16:04:47.103 に答える
5

これはコンストラクターの初期化リストでm、指定された値でクラスのメンバーを初期化します。

場合によっては初期化とそれに続く即時割り当てを防ぐためにあります(ここではありません)。

一部のメンバーは、初期化リストでのみ初期化できます-constメンバー、参照メンバー、デフォルトで構築できない型。

于 2012-11-01T16:04:39.017 に答える