Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / попытка написать класс с наслдованием / 8 сообщений из 8, страница 1 из 1
11.11.2012, 18:57
    #38033746
Violet-n-red
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
попытка написать класс с наслдованием
и сразу к делу: базовый класс содержит два параметра: высоту и ширину объекта. есть два наследующих класса - прямоугольник и равнобедренный треугольник. они вычисляют площадь исходя из данных, полученных от базового класса. но вот что-то я делаю не так и в упор не понимаю ,что именно. хотелось бы увидеть описание того ,что я здесь творю не так, а не просто готовое решение.

вариант 1:
Код: plaintext
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.
34.
35.
36.
37.
38.
39.
40.
41.
class area_cl{
public:
	double height,width;
};
class rectangle:public area_cl{
public:
	rectangle(double dheight,double dwidth);
	double area();
}
rectangle::rectangle(double dheight,double dwidth){ //'rectangle::{ctor}' : constructors not allowed a return type
		cin>>dheight>>dwidth;
		height=dheight;
		width=dwidth;
	}
double rectangle::area(){
	return height*width;
}
class isosceles:public area_cl{
public:
	isosceles(double dh,double dw){
		cin>>dh>>dw;
		height=dh;
		width=dw;
	}
	double area(); //see declaration of 'isosceles::area'
}
double isosceles::area(){ //'isosceles' followed by 'double' is illegal (did you forget a ';'?)
//'isosceles isosceles::area(void)' : overloaded function differs only by return type from 'double 
//'isosceles::area' : redefinition; different basic types
isosceles::area(void)'
	return (0.5*width*height);
}

int main()
{
	rectangle rect();
	isosceles isos();
	cout<<rect<<isos;
	keep_window_open();
	return 0;
	}



был еще такой вариант 2:

Код: plaintext
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
//#include"std_lib_facilities.h"

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
inline void keep_window_open(){char ch;cin>>ch;}


class area_cl{
public:
	double height,width;
};
class rectangle:public area_cl{
public:
	rectangle(double dheight,double dwidth){
		cin>>dheight>>dwidth;
		height=dheight;
		width=dwidth;
	}
	double area();
}
double rectangle::area(){
	return height*width;
}
class isosceles:public area_cl{
public:
	isosceles(double dh,double dw){
		cin>>dh>>dw;
		height=dh;
		width=dw;
	}
	double area();
}
double isosceles::area(){
	return (0.5*width*height);
}

int main()
{
	rectangle rectangle();
	isosceles isosceles();
	cout<<rectangle<<isosceles;
	keep_window_open();
	return 0;
	}



(25): error C2628: 'rectangle' followed by 'double' is illegal (did you forget a ';'?)
(25): error C2556: 'rectangle rectangle::area(void)' : overloaded function differs only by return type from 'double rectangle::area(void)'
23) : see declaration of 'rectangle::area'
(25): error C2371: 'rectangle::area' : redefinition; different basic types
(23) : see declaration of 'rectangle::area'
(37): error C2628: 'isosceles' followed by 'double' is illegal (did you forget a ';'?)
(37): error C2556: 'isosceles isosceles::area(void)' : overloaded function differs only by return type from 'double isosceles::area(void)'
(35) : see declaration of 'isosceles::area'
(37): error C2371: 'isosceles::area' : redefinition; different basic types
(35) : see declaration of 'isosceles::area'
...
Рейтинг: 0 / 0
11.11.2012, 19:45
    #38033783
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
попытка написать класс с наслдованием
Violet-n-red,

Начните с того что поубирайте мусор из кода:
1)
Код: plaintext
1.
isosceles::area(void)' 


что за кавычка после скобок?

2) конструкция class ... {} должна завершаться ;.
...
Рейтинг: 0 / 0
11.11.2012, 19:56
    #38033792
Violet-n-red
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
попытка написать класс с наслдованием
Код: plaintext
1.
isosceles::area(void)'

было частью предшествующего этой строке комментария. а вот кавычки сейчас посмотрю.
...
Рейтинг: 0 / 0
11.11.2012, 20:01
    #38033797
Страус++
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
попытка написать класс с наслдованием
А хидеры где , блин?
...
Рейтинг: 0 / 0
11.11.2012, 20:14
    #38033801
Violet-n-red
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
попытка написать класс с наслдованием
спокойно, они все на месте, я их разве что сюда не скопировал.

вот ,что у меня есть теперь:

Код: plaintext
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
inline void keep_window_open(){char ch;cin>>ch;}


class area_cl{
public:
	double height,width;
};
class rectangle:public area_cl{
public:
	rectangle(double dheight,double dwidth){
		cin>>dheight>>dwidth;
		height=dheight;
		width=dwidth;
	}
	double area();
};
double rectangle::area(){
	return height*width;
}
class isosceles:public area_cl{
public:
	isosceles(double dh,double dw){
		cin>>dh>>dw;
		height=dh;
		width=dw;
	}
	double area();
};
double isosceles::area(){
	return (0.5*width*height);
}

int main()
{
	rectangle rect();
	isosceles isos();
	cout<<rect<<isos;
	keep_window_open();
	return 0;
	}



при таком раскладе пишет следующее:
1>mainfile.obj : error LNK2019: unresolved external symbol "class rectangle __cdecl rect(void)" (?rect@@YA?AVrectangle@@XZ) referenced in function _main
1>mainfile.obj : error LNK2019: unresolved external symbol "class isosceles __cdecl isos(void)" (?isos@@YA?AVisosceles@@XZ) referenced in function _main
fatal error LNK1120: 2 unresolved externals

Но я глянул в книге ,как надо писать правильно и заменил
Код: plaintext
1.
2.
	rectangle rect();
	isosceles isos();


на
Код: plaintext
1.
2.
	rectangle rect;
	isosceles isos;


теперь при наведении на rect пишет:
Error: no default constructor exists for class "rectangle"
аналогично и для isos.

Я так понимаю, нельзя добавлять параметры конструктору не давая им значения при присваивании(вроде ,так называется. я про часть
Код: plaintext
1.
2.
	rectangle rect;
	isosceles isos;

) класса
...
Рейтинг: 0 / 0
11.11.2012, 20:18
    #38033806
Violet-n-red
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
попытка написать класс с наслдованием
и вот окончательный вид кода:
Код: plaintext
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
inline void keep_window_open(){char ch;cin>>ch;}


class area_cl{
public:
	double height,width;
};
class rectangle:public area_cl{
public:
	rectangle(double dheight,double dwidth){
		height=dheight;
		width=dwidth;
	}
	double area();
};
double rectangle::area(){
	return height*width;
}
class isosceles:public area_cl{
public:
	isosceles(double dh,double dw){
		height=dh;
		width=dw;
	}
	double area();
};
double isosceles::area(){
	return (0.5*width*height);
}

int main()
{
	rectangle rect(5,7);
	isosceles isos(2,4);
	cout<<rect.area()<<' '<<isos.area()<<endl;
	keep_window_open();
	return 0;
	}



Я, наконец ,рассмотрел какой жуткий бардак у меня в коде и всё поисправлял. всем спасибо за внимание! =D
...
Рейтинг: 0 / 0
12.11.2012, 14:50
    #38034724
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
попытка написать класс с наслдованием
Violet-n-red, у тебя в class area_cl

метод
double area();

так и не стал полиморфным.
...
Рейтинг: 0 / 0
21.11.2012, 14:43
    #38047061
Violet-n-red
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
попытка написать класс с наслдованием
MasterZiv,

полиморфизм еще не изучал, так что даже и не знаю ,что не так с этим методом. если Вы хотите сказать что-то по этому поводу - буду рад услышать!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / попытка написать класс с наслдованием / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]