Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
1

абстрактные классы

04.05.2011, 10:28. Просмотров 1575. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2011, 10:28
Ответы с готовыми решениями:

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

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

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

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

__________________
Помогаю в написании курсовых работ и дипломов здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
10
2 / 2 / 1
Регистрация: 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
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
04.05.2011, 19:45  [ТС] 3
не могу понять сделал как ты сказал, но у меня он все ровно на что то ругается!!
0
Jesus loves me
Эксперт С++
5163 / 3132 / 353
Регистрация: 12.12.2009
Сообщений: 7,919
Записей в блоге: 2
04.05.2011, 19:56 4
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
но у меня он все ровно на что то ругается!!
"Он" не может ругаться на что-то, "Он" ругается только на вполне конкретные вещи) Выложи список ошибок, понятней будет.
0
3 / 3 / 2
Регистрация: 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
Jesus loves me
Эксперт С++
5163 / 3132 / 353
Регистрация: 12.12.2009
Сообщений: 7,919
Записей в блоге: 2
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
3 / 3 / 2
Регистрация: 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
Jesus loves me
Эксперт С++
5163 / 3132 / 353
Регистрация: 12.12.2009
Сообщений: 7,919
Записей в блоге: 2
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
3 / 3 / 2
Регистрация: 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
Jesus loves me
Эксперт С++
5163 / 3132 / 353
Регистрация: 12.12.2009
Сообщений: 7,919
Записей в блоге: 2
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
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
04.05.2011, 20:37  [ТС] 11
о чудо скомпилировал=)))) а как в main.cpp организовать вывод?? подскажи пожалуйста!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2011, 20:37

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Абстрактные классы
Объясните пожалуйста почему это не работает и как исправить? cannot declare variable 'b1' to be...

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

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

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


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

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

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