m(i)在以下程序中代表什么? C ++

时间:2012-11-01 16:03:33

标签: c++

我正在尝试学习一些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)?这是语法问题吗?

3 个答案:

答案 0 :(得分:6)

构造函数中的m(i)初始化值为m的{​​{1}}成员。

您的示例与

具有相同的结果(而非行为)
i

使用初始化程序列表初始化成员的效率更高,因为使用参数A(int i) { m = i; } 直接调用成员的构造函数,而在上面的示例中,调用i的空构造函数并且然后 m被赋值m

答案 1 :(得分:5)

这是一个构造函数初始化列表,它使用指定的值初始化类的成员m

在某些情况下(不在此处),可以防止初始化,然后立即分配。

某些成员只能在初始化列表 - const成员,引用成员,非默认构造的类型中初始化。

答案 2 :(得分:5)

A(int i) : m(i) {}
         ^^^^^^ this is called member-initialization list.

此处m(i)表示正在使用m初始化i

如果您的班级中有更多成员,比如xy,那么您可以写下:

A(int i) : m(i), x(i*10), y(i*i) {}

所以在进入构造函数体之前,所有3个成员都已初始化

有关更详细的解答,请参阅以下主题: