Делаю лабораторную а тему массивов и полиморфизма в C++. Часть текста задания:
"Определим в объекте Group две функции с одинаковым именем, например double Age(); и double Age(int limit);. Первая функция пусть возвращает средний возраст группы людей, а вторая функция пусть возвращает средний возраст людей в группе, возраст которых не больше некоторого граничного значения limit. Функции отличаются списком аргументов."
Код с классом объектов массива
#pragma once
#include <iostream>
#include <string>
#include <string.h>
#include <stdlib.h>
using namespace std;
const char* def_marka = "Renault";
const int def_power = 150;
float const def_price = 15.15;
const int def_displacement = 1830;
class Car{
private:
const char* marka; //марка авто
int power; //мощность двигателя в кВт
float cost; //стоимость в тыс. $
int displacement; //объём двигателя
public:
void setMarka(const char* m){ //метод записи марки
marka = m;
}
operator double () {
return this->cost;
}
//следующие методы записи возвращают false, чтобы прервать цикл ввода
bool setPower(int pw){ //метод записи мощности
if (pw > 0 ){
power = pw;
return false;
}
else{
return true;
}
}
bool setCost(float p){ //метод записи стоимости
if (p > 0 ){
cost = p;
return false;
}
else{
return true;
}
}
bool setDis(int dis){ //метод записи объём двигателя
if (dis > 0 ){
displacement = dis;
return false;
}
else{
return true;
}
}
std::string getMarka() const { //метод чтения поля марка
return marka;
}
int getPower() const { //метод чтения поля мощность
return power;
}
float getCost() const { //метод чтения поля стоимость
return cost;
}
int getDis() const { //метод чтения поля объём двигателя
return displacement;
}
~Car(){ //деструктор
std::cout << "Destructor called for Car of mark " << getMarka() << std::endl;
}
public:
Car(const char* m = def_marka, int pw = def_power, float p = def_price, int dis = def_displacement){ //конструктор по умолчанию
marka = m;
power = pw;
cost = p;
displacement = dis;
};
public:
void Print() const{ //вывод параметров на экран
cout << "Marka is " << getMarka() << endl;
cout << "Price equals " << getCost() << " thousand $" << endl;
cout << "Power equals " << getPower() << " kW" << endl;
cout << "Displacement equals " << getDis() << " cm3" << endl;
};
void Input(); //функция ввода параметров, ещё не определена
};
//Car::operator double() {return this->power;};
//operator Car::double() { return this->power; }
inline void Car::Input(){ //функция ввода параметров
char *marka_ = new char[16];
std::cout << "Input mark: "; //введите марку авто
std::cin >> marka_;
setMarka(marka_);
do{
std::cout << "Input power (kW): "; //введите мощность авто в кВт
std::cin >> power;
} while(setPower(power)); //мощность не может быть неположительной
do{
std::cout << "Input cost (thousand $): "; //введите стоимости авто в тыс. $
std::cin >> cost;
} while(setCost(cost)); //стоимость не может быть неположительной
do{
std::cout << "Input displacement (cm3): "; //введите объём двигателя в см3
std::cin >> displacement;
} while(setDis(displacement)); //объём двигателся не может быть неположительным
delete marka_;
};
Код с массивом, в нём-то и фишка
#include "car.h" //подключение заголовочного файла
class Group{
public:
int size;
Car* array;
public:
void PutCar(int i, Car& trans){
array[i] = trans;
};
Car& GetCar(int i){
return array[i];
}
~Group(){ //деструктор
delete array;
std::cout << "Destructor called for Group of size " << Size() << std::endl;
}
public:
Group(int size){ //конструктор по умолчанию
size = size;
array = new Car[size];
};
operator double (){
int summ = 0;
for(int i = 0; i < sizeof(array); i++){
summ += array[i]->cost;
}
return summ/sizeof(array);
}
operator double (int limit){
int summ = 0;
int count = 0;
for(int i = 0; i < sizeof(array); i++){
if (array[i]->cost<=limit){
summ += array[i]->cost;
count += 1;
}
}
return summ/count;
}
int Size();
void Print();
};
int Group::Size(){
return size;
};
void Group::Print(){
for (int i = 0; i<sizeof(array); i++){
array[i].Print();
}
};
Главный файл
#include "group.h" //подключение заголовочного файла
int main(){
char marks[3][5] = {"Audi","BMW","Ford"};
int powers[3] = {100,110,120};
float costs[3] = {16.5,18,19.2};
int displaces[3] = {1800,1900,1980};
Group group(3);
for (int i = 0; i<3; i++){
group.PutCar(i,Car(marks[i],powers[i],costs[i],displaces[i]));
}
group.Print();
double price = group.GetCar(0);
cout << price << endl;
return 0;
}
Ошибки при компиляции
error C2835: user-defined conversion 'operator`double'' takes no formal parameters
error C2333: 'operator`double'' : error in function declaration; skipping function body
В принципе, понимаю. что нужно сделать, так как знаком с перегрузкой операторов в Python