Re: Не понимаю наследование?
От: leojan  
Дата: 25.09.09 22:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А> есть файл хедер:

А>#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 соответствующий адрес
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.