我创建了一个指针数组,该数组表示名为Sinif的Class对象。 Sinfi *sinif = new Sinif[5]
我们知道每个元素都有一个地址。例如,在我的家庭作业中,我想将sinif的第一个元素与第二个元素及其adre交换。在Degistir函数中它会更改,但是只有最后写入的命令运行良好。假设我们要用1更改Sinif 0,将0更改为1,但1保持不变。这是详细示例的照片。
在这里,第一个用户输入要移动的元素,而不是要移动的位置,并且程序在找到每个Sinif数组时会在其中寻找它。然后,将adreses收集到temp和temp2中。
Sinif *temp;
Sinif *temp2;
void Yonetim::SinifDegistir() {
char DegisecekSinif;
char YeniYeri;
cout << "Degisecek Sinif Adi: "; cin >> DegisecekSinif;
cout << "Yeni Sinif Yerinin Adi: "; cin >> YeniYeri;
for (int i = 0; i < okul->SayacGet(); i++)
{
if (DegisecekSinif == okul->sinif[i].sinif) {
temp = okul->sinif + i;
for (int j = 0; j < okul->SayacGet(); j++)
{
if (YeniYeri == okul->sinif[j].sinif) {
temp2 = okul->sinif + j;
Degis(i, j);
}
}
}
}
}
void Yonetim::Degis(int i, int j) {
(okul->sinif[i]) = *temp2;
(okul->sinif[j]) = *temp;
TabloYazdirma();
}
答案 0 :(得分:1)
Sinfi *sinif = new Sinif[5]
在内存中创建5个Sinif实例的数组。不是指针,而是实际实例。
所以当您稍后说:
(okul->sinif[i]) = *temp2;
您要做的是将sinif的内容从一个复制到另一个。现在两者都一样了。所以下一行
(okul->sinif[j]) = *temp;
什么都不做。 *temp
已被*temp2
覆盖,您只需将其复制回来。
答案 1 :(得分:0)
我使用了swap();
函数,该函数在注释中建议使用,而不是试图获取每个元素的地址,我还添加了名为degisti的bool变量,以防止其恢复原状。
void Yonetim::SinifDegistir() {
char DegisecekSinif;
char YeniYeri;
bool degisti = false;
cout << "Degisecek Sinif Adi: "; cin >> DegisecekSinif;
cout << "Yeni Sinif Yerinin Adi: "; cin >> YeniYeri;
for (int i = 0; i < okul->SayacGet(); i++)
{
if (DegisecekSinif == okul->sinif[i].sinif && !degisti) {
temp = okul->sinif + i;
for (int j = 0; j < okul->SayacGet(); j++)
{
if (YeniYeri == okul->sinif[j].sinif) {
temp2 = okul->sinif + j;
Degis(i, j,degisti);
}
}
}
}
}
void Yonetim::Degis(int i, int j, bool °isti) {
swap(okul->sinif[i], okul->sinif[j]); //changes
TabloYazdirma();
degisti = true; //bool says it was swapped
}