在C ++中用括号初始化数组对象

Levent Divilioglu

这里有一个带有两个私有字段x和y的类;

class Point
{
private:
    int x, y;
public:
    Point(int = 1,int = 1);
    void move(int, int);
    void print()
    {
        cout << "X = " << x << ", Y = " << y << endl;
    }
};

当按如下所示初始化Point对象的数组时,输出正常;否则,输出为0。

Point array1[] = { (10), (20), { 30, 40 } };

输出;

First array
X = 10, Y = 1
X = 20, Y = 1
X = 30, Y = 40

但是,如果我们按如下所示初始化Point数组,则输出很奇怪;

Point array2[] = { (10), (20), (30, 40) }; 

输出;

Second array
X = 10, Y = 1
X = 20, Y = 1
X = 40, Y = 1

为什么(30,40)不能用于Point对象的初始化?

这是完整的测试代码;

#include <iostream>
using namespace std;

class Point
{
private:
    int x, y;
public:
    Point(int = 1,int = 1);
    void move(int, int);
    void print()
    {
        cout << "X = " << x << ", Y = " << y << endl;
    }
};

Point::Point(int x, int y)
{
    cout << "..::Two Parameter Constructor is invoked::..\n";
    this->x = x;
    this->y = y;
}

void Point::move(int x, int y)
{
    this->x = x;
    this->y = y;
}

int main()
{
    // Point array1[] = { Point(10), Point(20), Point(30, 40) };
    // Use parenthesis for object array initialization;
    Point array1[] = { (10), (20), { 30, 40 } };    // curly bracket used for two parameter
    Point array2[] = { (10), (20), (30, 40) };      // paranthesis used for all objects

    cout << "First array" << endl;
    for (int i = 0; i < 3; i++)
        array1[i].print();

    cout << "Second array" << endl;
    for (int i = 0; i < 3; i++)
        array2[i].print();

    return 0;
}

并完整输出测试代码;

..::Two Parameter Constructor is invoked::..
..::Two Parameter Constructor is invoked::..
..::Two Parameter Constructor is invoked::..
..::Two Parameter Constructor is invoked::..
..::Two Parameter Constructor is invoked::..
..::Two Parameter Constructor is invoked::..
First array
X = 10, Y = 1
X = 20, Y = 1
X = 30, Y = 40
Second array
X = 10, Y = 1
X = 20, Y = 1
X = 40, Y = 1
101010

为什么(30,40)无法正常运作:

陈述(30, 40)陈述不相同,陈述与{30, 40}也不(30)相同{30}

(30, 40)是由逗号运算符分隔的表达式序列(在这种情况下为整数),其结果为最后一个表达式(即40)。{30, 40}在使用的上下文中是聚合初始化列表

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

数组中的括号初始化C ++

来自分类Dev

初始化类对象数组C ++

来自分类Dev

C语言中的花括号char数组初始化

来自分类Dev

在C ++ 11中对结构数组进行括号初始化

来自分类Dev

错误C7034:无法使用带括号的初始化程序初始化数组

来自分类Dev

如果构造函数是初始化的,如何初始化对象的数组?C ++

来自分类Dev

带有参数C ++的对象数组的初始化列表

来自分类Dev

在C ++中初始化二维对象数组

来自分类Dev

在C ++中初始化对象中的数组

来自分类Dev

初始化面向对象的数组C ++

来自分类Dev

带花括号的C ++部分初始化

来自分类Dev

初始化数组C ++

来自分类Dev

在构造函数C ++中用零初始化2D数组

来自分类Dev

C#对象初始化程序-包括构造函数调用括号吗?

来自分类Dev

莫名其妙的行为:C ++原语/对象初始化中不带参数的圆括号

来自分类Dev

数组未在C ++中使用花括号进行初始化

来自分类Dev

C ++ 20从带括号的值列表初始化聚合,不支持内部数组

来自分类Dev

数组未在C ++中使用花括号进行初始化

来自分类Dev

从花括号括起来的列表初始化数组的 C++ 怪异

来自分类Dev

C:为什么我不能用大括号初始化数组内的结构?

来自分类Dev

初始化对象C#

来自分类Dev

C ++指针和对象初始化

来自分类Dev

对象C初始化器声明

来自分类Dev

Objective-C对象初始化

来自分类Dev

C#初始化对象

来自分类Dev

C ++对象初始化(堆栈)

来自分类Dev

C#对象初始化

来自分类Dev

C#初始化对象

来自分类Dev

在堆上初始化向量数组,C ++