Özet olarak, amacım foo [bar] return1 ve foo [bar] = return type2 olmaktır.Birden çok işleçlerin aşırı yüklenmesi
C++ 'da bir nesne yazıyorum ve oldukça güzel geliyor, ancak yapmak istediğim küçük bir şey var, ama imkansız görünüyor.
Nesnem bir depolama sınıfı, bu yüzden değerlere erişmek için bir dizi alt kümesi kullanıyorum. Ayrıca atamam gerekiyor, bu yüzden de = operatörünü aşırı yüklüyorum. Ancak, biraz rahatsız edici çünkü sınıfımın sahip olduğu değerler birinci sınıf nesnelerdir, bu yüzden dizi altbilgisi yüklerim için onları olduğu gibi iade edemiyorum. = İşleci kullanmak için bir orta sınıf döndürmem gerekiyor, ancak ek yazmadan da değeri almak istiyorum.
Bunu yapmanın bir yolu var mı? Hakikat yolları kabul edilebilir.
Düzenleme: İşte yine
#include<cstdio>
#include<cstdlib>
class foo{
char* a[100];
foo(){
for(int i = 0; i < 100; i ++)
a[i] = 0;
}
char* operator[] (int location){
return a[location];
}
foo& operator[]= (int location, const char* value){
if(a[location] == 0)
a[location] = (char*) malloc(strlen(value) + 1);
else
a[location] = (char*) realloc(a[location], strlen(value) + 1);
strcpy(a[location], value);
}
};
int main(){
foo bar;
bar[20] = "Hello";
printf("bar[20] = %s\n", bar[20]);
bar[20] = "Hello There";
printf("bar[20] = %s\n", bar[20]);
printf("bar[20][0] = %c\n", bar[20][0]);
}
Output:
bar[20] = Hello
bar[20] = Hello There
bar[20][0] = H
Edit do (olmalı) ne bir örnek: Ben farklı bir bu phrasing çalışacağım düşünüyorum, ama çalışılabilir bir yol. Bir sınıf referans alındığında dönüş türünü aşırı yüklemenin bir yolu var mı? Aslında, bu gerçekten çalışacak şekilde
mu?
kod biraz verebilir misiniz siz çalıştığınız şeyi gösteriyor ki yapmak? –
Örnek bir – Kaslai