Страница 1 из 1

Не пойму как работает класс

Добавлено: 05 авг 2010, 03:05
Lotles

Код: Выделить всё

#include <stdafx.h>
#include <conio.h>
using namespace std;
class String {
public:
	char* ptr;
	String(char* s){
	int n = strlen(s);
    ptr = new char[n + 1];
    strcpy(ptr, s);
	}
	String(){
		ptr=new char[1];
		ptr[0]='\0';
	}
	~String(){
	delete [] ptr;
	cout << "dectruction " << endl;
}
	int operator==(const String &other){
    return (strcmp(ptr, other.ptr) == 0);
	}
    operator char*() {
				return ptr;
	}
};
int main() {
    String a("STRING 1");
    String b("STRING 2");
    String c;                
    cout << "The value of a is: " << endl;
    cout << a << endl;
    cout << "The value of b is: " << endl;
    cout << b << endl;
	cout << "The value of c is between these brackets<";
    cout << c << ">" << endl;
}

Код: Выделить всё

cout << a << endl; 
Вызывается это

Код: Выделить всё

operator char*() {
return ptr;
Как компилятор узнает какой ptr возвратить, их же несколько

Re: Не пойму как работает класс

Добавлено: 05 авг 2010, 12:06
BulldozerBSG
почему несколько? один на объект...

Re: Не пойму как работает класс

Добавлено: 05 авг 2010, 22:21
Romeo
Компилятор действует следующим образом. Сначала он пытаешься найти соответствующий внешний оператор << со вторым параметром String. Естественно он такого не находит. Тогда его следующий ход - перебрать все операторы приведения у класса String и найти среди них тот, для которого определён внешний оператор <<. При проверке первого же оператора приведения operator char*() он находит внешний оператор << (const std: :o stream& stream, const char* str), который определён в <ostream> и вызывает его, передав ему в качестве второго параметра то, что вернул operator char*().