Как вызвать функцию-член родительского класса из перегруженной функции?

Я создал один новый класс, который унаследован от строкового класса. Я хочу перегрузить оператор < (меньше) в производном классе. Но из перегруженной функции мне нужно вызвать оператор < родительского класса. Каков синтаксис для вызова этой функции? Я хотел бы по возможности реализовать оператор как функцию-член.

В Java для этого есть super ключевое слово.

Мой код приведен ниже.

#include<iostream>
#include<string>
using namespace std;    
class mystring:public string
    {
     bool operator<(const mystring ms)
     {
      //some stmt;
      //some stmt;
      //call the overloaded <( less than )operator in the string class and return the value
      }

    };

person Able Johnson    schedule 12.02.2014    source источник
comment
Спасибо за ссылку, мне нужен синтаксис для вызова оператора меньше чем в родительском классе.   -  person Able Johnson    schedule 12.02.2014


Ответы (2)


std::string не имеет перегрузки элемента operator<, есть бесплатный шаблон функции для operator<, который работает на std::string. Вам следует подумать о том, чтобы сделать вашу operator< бесплатной функцией для. Чтобы вызвать operator<, который работает с std::string, вы можете использовать ссылки.

E.g.:

const std::string& left = *this;
const std::string& right = ms;
return left < right;
person CB Bailey    schedule 12.02.2014
comment
Большое тебе спасибо! Этот отлично работает. Не могли бы вы ответить еще на одно сомнение. Если это бесплатный шаблон функции, по умолчанию он должен работать и для mystring. Но компилятор выдает ошибку, когда я удаляю функцию operator ‹из mystr. - person Able Johnson; 12.02.2014
comment
@AbleJohnson: Какую ошибку выдает компилятор и как на самом деле выглядит код, который выдает эту ошибку? - person CB Bailey; 12.02.2014
comment
#include<iostream> #include<string> using namespace std; class mystring:public string { }; int main() { mystring a,b; cout<<a<b; return(0); } Это мой код. Компилятор выдает очень длинную страницу с ошибкой - person Able Johnson; 12.02.2014
comment
@AbleJohnson: Вы, вероятно, имели в виду cout<<(a<b); (<< связывает более плотно, чем <), но сообщение о том, что ошибка длилась долго, все равно не дает мне никакого представления о ее содержании. - person CB Bailey; 12.02.2014

Вызвать оператор базового класса легко, если вы поймете, что это просто функция с забавным названием:

bool operator<(const mystring ms)
{
  //some stmt;
  //some stmt;
  return string::operator<(ms);
}

Увы, это не работает с std::string, потому что operator< не функция-член, а бесплатная функция. Что-то типа:

namespace std
{
    bool operator<(const string &a, const string &b);
}

Обоснование то же самое, вызовите забавную названную функцию:

bool operator<(const mystring ms)
{
  //some stmt;
  //some stmt;
  operator<(*this, ms);
}
person rodrigo    schedule 12.02.2014
comment
std::string не имеет участника operator<. - person CB Bailey; 12.02.2014
comment
Я попробовал эту ошибку: ‘operator‹ ’не является членом‘ std :: string {aka std :: basic_string ‹char›} ’ - person Able Johnson; 12.02.2014
comment
Опс! Вы правы, это бесплатная функция! не членский! Исправляем ответ ... - person rodrigo; 12.02.2014