में ओवरलोडिंग ऑपरेटर मैं अभी सी ++ में ओवरलोडिंग ऑपरेटरों का अभ्यास कर रहा हूं और मुझे कोई समस्या है। मैंने स्ट्रिंग क्लास बनाया है, इसमें सिर्फ फ़ील्ड हैं, एक चार सरणी है, अन्य लंबाई है। मैं एक स्ट्रिंग है "एलिस एक बिल्ली है" और जब मैंसी ++ और अधिभार
cout<<moj[2];
फोन मैं पाने के लिए 'i' चाहते हैं, लेकिन अब मैं हो रही है moj + moj की 16U पता + 2 sizeof (स्ट्रिंग) जब मैं
cout<<(*moj)[2];
यह चौंकाने वाला काम करता है लेकिन मैं ओवरलोडेड ऑपरेटर परिभाषा में इसे कम करना चाहता हूं। मैंने कई चीजों की कोशिश की लेकिन मुझे समाधान नहीं मिला। कृप्या मुझे सही करें।
char & operator[](int el) {return napis[el];}
const char & operator[](int el) const {return napis[el];}
और पूरा कोड, महत्वपूर्ण चीजें पृष्ठ के नीचे हैं। यह संकलन और काम कर रहा है।
#include <iostream>
#include <cstdio>
#include <stdio.h>
#include <cstring>
using namespace std;
class String{
public:
//THIS IS UNIMPORTANT------------------------------------------------------------------------------
char* napis;
int dlugosc;
String(char* napis){
this->napis = new char[20];
//this->napis = napis;
memcpy(this->napis,napis,12);
this->dlugosc = this->length();
}
String(const String& obiekt){
int wrt = obiekt.dlugosc*sizeof(char);
//cout<<"before memcpy"<<endl;
this->napis = new char[wrt];
memcpy(this->napis,obiekt.napis,wrt);
//cout<<"after memcpy"<<endl;
this->dlugosc = wrt/sizeof(char);
}
~String(){
delete[] this->napis;
}
int length(){
int i = 0;
while(napis[i] != '\0'){
i++;
}
return i;
}
void show(){
cout<<napis<<" dlugosc = "<<dlugosc<<endl;
}
//THIS IS IMPORTANT
char & operator[](int el) {return napis[el];}
const char & operator[](int el) const {return napis[el];}
};
int main()
{
String* moj = new String("Alice has a cat");
cout<<(*moj)[2]; // IT WORKS BUI
// cout<<moj[2]; //I WOULD LIKE TO USE THIS ONE
return 0;
}
आप' होना चाहिए moj हटाएँ:
इसके अलावा कि कुछ भी आप आवंटित ध्यान दें
new
जरूरतों के साथ के बाद हटाए जाने के लिए। – Mattमैंने इसे हटा दिया है इसलिए कम से कम कोड है। – Yoda