Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
#1

абстрактные классы - C++

04.05.2011, 10:28. Просмотров 1057. Ответов 10
Метки нет (Все метки)

компилятор ругается когда я пытаюсь записать объект класса!!!!
подскажите что я не правильно делаю!!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cstdlib>
#include <iostream>
#include "FazzyNumber.h" 
 
using namespace std;
 
int main()
{FazzyNumber u1;\\вот тут!!!
 
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//виртуальный класс
#ifndef Pair
#define Pair
 using namespace std;
 
class para{ 
    public:
           double X,e1,e2,a1,a2,a3;
      virtual void composition()=0;
      virtual void subtraction()=0;    
      virtual void multiplication()=0; 
      virtual void division()=0; 
};
 
#endif
основной класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef CLASS 
#define CLASS 
 
#include <iostream>
#include "Pair.h" 
using namespace std; 
class FazzyNumber: public para{
      public:
        FazzyNumber();
        FazzyNumber(double,double,double);
        FazzyNumber(const FazzyNumber &);
        friend istream& operator >>(istream& , FazzyNumber&);
        friend ostream& operator <<(ostream& , const FazzyNumber&);
 
        void composition(const FazzyNumber&);
        void subtraction(const FazzyNumber&);
 
        //FazzyNumber multiplication(const FazzyNumber& );
       
        //FazzyNumber division(const FazzyNumber& );
   
                                    
};
#endif
метод
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <math.h> 
#include <conio.h>
#include <iostream> 
#include "FazzyNumber.h" 
using namespace std;
FazzyNumber::FazzyNumber(){
X=e1=e2=0;
};
FazzyNumber::FazzyNumber( double X1,double e11, double e21){
X=X1, e1=e11, e2=e21;
};
FazzyNumber::FazzyNumber(const FazzyNumber& u1){
X=u1.X, e1=u1.e1, e2=u1.e2;
};
ostream& operator <<(ostream& out, const FazzyNumber& u){
out<<"("<<u.X<<" , "<<u.e1<<" , "<<u.e2<<")"<<endl;
return out;
};
istream& operator >>(istream& in, FazzyNumber& u){
        do{       if(u.X<0) cout<<"Retype!!!\n";
                  in>>u.X>>u.e1>>u.e2;
        }while(u.X<0);        
        return in;
};
 
void FazzyNumber::composition(const FazzyNumber& u){
     double a1,a2,a3;
     a1=u.X+X-u.e1-e1;
     a2=u.X+X;
     a3=u.X+X+u.e2+e2;
 cout<<"("<<a1<<","<<a2<<","<<a3<<")\n";   
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2011, 10:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос абстрактные классы (C++):

Абстрактные классы - C++
Помогите плиз, экзаменационное задание, а разобраться не могу с ним: Создать консольное приложение, в котором реализовать работу...

Абстрактные классы - C++
Никак не могу понять смысл абстрактных данных.Ведь мы можем использовать и обычный класс,только абстракция запрещает создавать объекты.

Абстрактные классы - C++
Помогите пожалуйста, сообразить не могу. Есть абстрактный класс. У него есть метод, чтение из файла. Есть производный от него класс....

Абстрактные классы - C++
void _tmain() { const int lim = 100; MyFunction *pFunc ; int count = 0; pFunc = new My_Exp; pFunc = new Line; pFunc...

абстрактные классы - C++
Здрасте я при написании программы столкнулся с проблемой что немогу создать указатель на объект т.к. класс абстрактный прошу помогите...

Абстрактные классы - C++
Объясните пожалуйста почему это не работает и как исправить? cannot declare variable 'b1' to be of abstract type 'classB' because the...

10
Нач_физик
2 / 2 / 0
Регистрация: 12.02.2011
Сообщений: 49
04.05.2011, 12:41 #2
В абстрактном классе 4 чистые виртуальные функции, в производном определены только
void composition(const FazzyNumber&);
void subtraction(const FazzyNumber&); следовательно
virtual void multiplication()=0;
virtual void division()=0;
наследуются от родителя как чистые виртуальные, и сам класс наследник становится абстрактным классом, обект которого нельзя создать, потому и ругается
0
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
04.05.2011, 19:45  [ТС] #3
не могу понять сделал как ты сказал, но у меня он все ровно на что то ругается!!
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,356
Записей в блоге: 2
Завершенные тесты: 1
04.05.2011, 19:56 #4
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
но у меня он все ровно на что то ругается!!
"Он" не может ругаться на что-то, "Он" ругается только на вполне конкретные вещи) Выложи список ошибок, понятней будет.
0
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
04.05.2011, 20:06  [ТС] #5
[Linker error] undefined reference to `vtable for para'
[Linker error] undefined reference to `para::composition()'
ld returned 1 exit status
ну вот как то так

Добавлено через 3 минуты
я эти исправил теперь не могу создать в main объект класса

Добавлено через 1 минуту
8 D:\прога\67\main.cpp cannot declare variable `t1' to be of type `FazzyNumber'
8 D:\прога\67\main.cpp because the following virtual functions are abstract:
9 D:\прога\67\Pair.h virtual void para::composition()
теперь мне вот эти покоя не дают!!!
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,356
Записей в блоге: 2
Завершенные тесты: 1
04.05.2011, 20:10 #6
Это ошибки линкера. Он не может "привязать" `vtable for para' и `para::composition()'. Возможно они объявлены, но не определены или что-нибудь в этом духе. Без кода сложно сказать.

Добавлено через 2 минуты
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
8 D:\прога\67\main.cpp cannot declare variable `t1' to be of type `FazzyNumber'
8 D:\прога\67\main.cpp because the following virtual functions are abstract:
9 D:\прога\67\Pair.h virtual void para::composition()
теперь мне вот эти покоя не дают!!!
Не может создать объект, потому что ф-ция void para::composition() "абстракная" (похоже имеется ввиду "чисто виртуальная")
0
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
04.05.2011, 20:10  [ТС] #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*main.h*/
#include <cstdlib>
#include <iostream>
#include "FazzyNumber.h" 
 
using namespace std;
 
int main()
{FazzyNumber t1;
//cout<<u1.composition(u2);
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*абстрактный класс*/
#ifndef Pair
#define Pair
 
 using namespace std;
 
class para{ 
    public:
           double X,e1,e2,a1,a2,a3;
     virtual void composition()=0;
     //virtual FazzyNumber composition(FazzyNumber);  
     //virtual FazzyNumber multiplication(FazzyNumber);
     //virtual  FazzyNumber division(FazzyNumber);
};
 
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*произвольный класс*/
#ifndef CLASS 
#define CLASS 
 
#include <iostream>
#include "Pair.h" 
using namespace std; 
class FazzyNumber: public para{
      public:
        FazzyNumber();
        FazzyNumber(double,double,double);
        FazzyNumber(const FazzyNumber &);
        friend istream& operator >>(istream& , FazzyNumber&);
        friend ostream& operator <<(ostream& , const FazzyNumber&);
 
        virtual void composition(const FazzyNumber&);
        ///FazzyNumber subtraction(const FazzyNumber& );
        //FazzyNumber multiplication(const FazzyNumber& );
        //FazzyNumber reverseA();
        //FazzyNumber division(const FazzyNumber& );
 
                                    
};
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*метод произвольного класса*/
#include <math.h> 
#include <conio.h>
#include <iostream> 
#include "FazzyNumber.h" 
using namespace std;
FazzyNumber::FazzyNumber(){
X=e1=e2=0;
};
FazzyNumber::FazzyNumber( double X1,double e11, double e21){
X=X1, e1=e11, e2=e21;
};
FazzyNumber::FazzyNumber(const FazzyNumber& u1){
X=u1.X, e1=u1.e1, e2=u1.e2;
};
ostream& operator <<(ostream& out, const FazzyNumber& u){
out<<"("<<u.X<<" , "<<u.e1<<" , "<<u.e2<<")"<<endl;
return out;
};
istream& operator >>(istream& in, FazzyNumber& u){
        do{       if(u.X<0) cout<<"Retype!!!\n";
                  in>>u.X>>u.e1>>u.e2;
        }while(u.X<0);        
        return in;
};
 
void FazzyNumber::composition(const FazzyNumber& u){
     double a,b,c;
     a=u.X+X-u.e1-e1;
     b=u.X+X;
     c=u.X+X+u.e2+e2;
            cout<<"("<<a<<","<<b<<","<<c<<"0\n";
};
Добавлено через 34 секунды
ну да, она виртуальная, так задумывалось!!
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,356
Записей в блоге: 2
Завершенные тесты: 1
04.05.2011, 20:13 #8
Попробуй вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*абстрактный класс*/
#ifndef Pair
#define Pair
 
 using namespace std;
 
class para{ 
    public:
           double X,e1,e2,a1,a2,a3;
     virtual void composition(const FazzyNumber&)=0;
     //virtual FazzyNumber composition(FazzyNumber);  
     //virtual FazzyNumber multiplication(FazzyNumber);
     //virtual  FazzyNumber division(FazzyNumber);
};
 
#endif
0
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
04.05.2011, 20:16  [ТС] #9
пробовал
вот результат!!
9 D:\прога\67\Pair.h expected `,' or `...' before '&' token //это как я понял он на амперсант ругается
9 D:\прога\67\Pair.h ISO C++ forbids declaration of `FazzyNumber' with no type //а это он типа переменной FazzyNumber не знает.....
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,356
Записей в блоге: 2
Завершенные тесты: 1
04.05.2011, 20:35 #10
Да, тупанул) Вот так нужно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*абстрактный класс*/
#ifndef Pair
#define Pair
 
 using namespace std;
class FazzyNumber;
class para{
    public:
           double X,e1,e2,a1,a2,a3;
     virtual void composition(const FazzyNumber&)=0;
     //virtual FazzyNumber composition(FazzyNumber);
     //virtual FazzyNumber multiplication(FazzyNumber);
     //virtual  FazzyNumber division(FazzyNumber);
};
 
#endif
0
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
04.05.2011, 20:37  [ТС] #11
о чудо скомпилировал=)))) а как в main.cpp организовать вывод?? подскажи пожалуйста!!
0
04.05.2011, 20:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2011, 20:37
Привет! Вот еще темы с ответами:

Абстрактные классы - C++
Народ, вопрос есть такой. Есть абстрактный класс class A { protected: int a; public: A(int b=0):a(b) {

Абстрактные классы - C++
В общем есть у нас 2 абстрактных класса CA и CB и 2 дочерних от них класса CC и CD. Как сделать так чтобы CD наследовал CB поверх которого...

Абстрактные классы - C++
Ребята! Помогите с таким делом. Мне дали задание создать абстрактный класс Автомобиль, классы наследники: гоночный автомобиль, асфальтный...

Абстрактные классы. Интерфейсы - C++
Помогите пожалуйста!!! Лабораторная работа по ООП. Тема: Абстрактные классы. Интерфейсы. Цель: получить навыки создания иерархии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru