gpt4 book ai didi

c++ - 类数组和赋值运算符

转载 作者:行者123 更新时间:2023-11-30 02:00:14 24 4
gpt4 key购买 nike

我是 C++ 新手,我正在尝试做以下事情:

我有一个简单的类,叫做“sim”。我想创建一个包含 10 个类型为“sim”的元素的数组。所以我使用了 sim** a = new sim*[10]

然后我循环运行,并创建新元素,如 a[i]=new sim(i)。但是当我稍后尝试打印每个 a[i] 的值(字段)时,我除了得到什么之外没有得到什么。

代码如下:

#include "stdafx.h"
#include <iostream>
using namespace std;

class sim{
private:
int x;
const int y;
public:
sim();
sim(int z);
~sim();
void showInfo();
sim& operator=(const sim& s);
};

sim::sim():y(10),x(0)
{}

sim::sim(int z):y(10),x(z)
{}

sim::~sim()
{}

void sim::showInfo()
{
cout<<"x="<<x<<", y="<<y<<endl;
}

sim& sim::operator=(const sim& s)
{
x=s.x;
return *this;
}

int _tmain(int argc, _TCHAR* argv[])
{
sim** a = new sim*[10];
for(int i=0;i<10;i++)
{
a[i]= new sim(i);
}

for(int i=0; i<10; i++)
(*a)[i].showInfo();
getchar();
return 0;
}

这是错误的输出:

x=0, y=10
x=-33686019, y=-830047754
x=-33686019, y=-572662307
x=1869774733, y=201385040
x=725928, y=726248
x=1423328880, y=11
x=24, y=2
x=55, y=-33686019
x=4814584, y=-1
x=0, y=0

Y 应始终为 10,x 应为 0-9。我究竟做错了什么?谢谢!

最佳答案

问题是你语句中的操作顺序

(*a)[i].showInfo();

这是取消引用 a,给你一个指向 sim 实例的点,然后你正在索引它。相反,您应该索引 a,然后取消引用结果:

(*(a[i])).showInfo();

上面的括号是为了清楚起见。给定 C++ 运算符优先级,您可以安全地将该行写为:

(*a[i]).showInfo();

奇怪输出的原因是你正在索引你用 new 分配的第一个 sim 实例,它位于堆内存中的任意位置。您只是将后续内存块视为 sim 实例,这会导致未定义的成员值。

关于c++ - 类数组和赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15371354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com