в результате ругается на "resistive::GetCurrent(float Potential1, float Potential2,float frequency){return 0;}" функция не определена в хэдаре, но как я понимаю мы наследуемся от element1 и его функции нам доступны, если они определены как virtual мы можем их переопределить для нового класса...
то он ругается что функции не определены, хотя ни одного экземпляра данного класса не используется в программе.
Что я не правильное делаю? или что я не до понимаю?
Здравствуйте, TimurSPB, Вы писали:
TSP>Наследование, примененное вместо агрегации, группой лиц по предварительному сговору. TSP>Предлагаю ввести закон это карающий.
Здравствуйте, Аноним, Вы писали:
А> есть файл хедер: А>#pragma once А>class element1{ А>public: А> virtual float GetCurrent(float Potential1, float Potential2,float frequency); А> virtual float GetVoltage(float Current,float frequency); А>};
А>class resistive: public element1{ А>float value_of_resistive; А>resistive(float value); А>};
А>и есть собственно файл с кодом
А>#include "stdafx.h" А>resistive::resistive(float value){value_of_resistive = value;} А>resistive::GetCurrent(float Potential1, float Potential2,float frequency){return 0;}
Здесь еще должно ругаться что нет типа возврата функции (float)
А>float element1::GetCurrent(float Potential1, float Potential2,float frequency){return 0;}; А>float element1::GetVoltage(float Current,float frequency){return 0;};
А>в результате ругается на "resistive::GetCurrent(float Potential1, float Potential2,float frequency){return 0;}" функция не определена в хэдаре, но как я понимаю мы наследуемся от element1 и его функции нам доступны, если они определены как virtual мы можем их переопределить для нового класса...
Да можем, но обязаны сделать объявку в хедере для добавки в vtable
А>и еще если из файла с кодом убрать: А>float element1::GetCurrent(float Potential1, float Potential2,float frequency){return 0;}; А>float element1::GetVoltage(float Current,float frequency){return 0;}; А>то он ругается что функции не определены, хотя ни одного экземпляра данного класса не используется в программе. А> Что я не правильное делаю? или что я не до понимаю?
Правильно ругается ... он же должен знать где находится имплементация витуальных функций базового класса чтобы впихнуть в vtable соответствующий адрес
Не бог весть что, но читабельно и работает.
Если по пунктам:
1. Объявлять тип возврата из функции обязательно, assume int давно отменили
2. Если делаем перегрузку, объявляем её в классе-потомке
3. Неплохо бы не забывать про виртуальные деструкторы