public: Date(int dd = today.d, int mm = today.m, int yy = today.y); // ... }; void my_fct(Date d); void f() { Date d {15}; // 15-е число этого месяца // ... my_fct(15); // ОЙ d = 15; // хм... // ... }
const { return 100; } // явное преобразование в std::string explicit operator std::string() const { return "explicit"; } }; int main() { A a; int i = a; // OK - неявное преобразование std::string s = a; // Ошибка. Нужно явное преобразование std::string t = static_cast<std::string>(a); // OK } explicit преобразование типов
operator delete(void∗, size_t); void *operator new[](size_t); void operator delete[](void∗, size_t); }; class Manager : public Employee { /* ... */ }; Employee *p = new Manager; // ... delete p; // нужен виртуальный деструктор! // sizeof(Manager) будет передан вторым аргументом // в operator delete. Обычные new и delete для конкретного класса
имеет тип X, а y – тип Y: • Если X – класс, поискать operator@ как член X или его базового класса. • Поискать operator@ в контексте выражения x@y. • Если X объявлен в пространстве имён N, поискать operator@ в этом пространстве имён. • Если Y объявлен в пространстве имён M, поискать operator@ в этом пространстве имён.