Форум программистов, компьютерный форум CyberForum.ru

Полиморфный конструктор [C++] - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 11:19     Полиморфный конструктор [C++] #1
Добрый день форумчане! Помогите разобраться, что такое полиморфный конструктор. На рсдн нашел про класс(в себе должен содержать виртуальную функцию\метод\конструктор\деструктор). Случаем конструктор не будет объявляться как виртуальный метод?

Тоесть

C++
1
2
3
4
5
6
7
8
class A {
public:
int c,b;
virtual A(int c,int b){
this-> c=c;
this-> b=b; 
}
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
27.04.2012, 11:30     Полиморфный конструктор [C++] #2
Полиморфного конструктора нет и быть не может.
Есть только виртуальный деструктор.
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 11:45  [ТС]     Полиморфный конструктор [C++] #3
Хмммм, тогда наш преподователь совсем рихнулся... В задании написано "Продемонстрируйте использование полиморфных конструкторов и перегруженных функций" Всегда знал, что он не от мира сего. Может тогда он имел ввиду Виртуальный конструктор? больше ничего в голову не приходит...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
27.04.2012, 13:02     Полиморфный конструктор [C++] #4
Aero93, Нету виртуального конструктора)
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
27.04.2012, 13:13     Полиморфный конструктор [C++] #5
http://www.parashift.com/c++-faq-lit....html#faq-20.8
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 13:25  [ТС]     Полиморфный конструктор [C++] #6
Спасибо. Но как тогда его использовать в данном случае?

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <math.h>
using namespace std;
class Point {
public:
int x,y,x1,y1;
virtual void show() {
cout<< "x="<<x<<endl;
cout<< "y="<<y<<endl;
cout<< "x2="<<x1<<endl;
cout<< "y2="<<y1<<endl;}
}; Point A;
class Line : public Point {
 public:
 int qx,qy;
 int dx,dy;
 int l;
 float line;
 virtual float Lline(int x, int y, int x1, int y1){
    dx=x1-x;
    dy=y1-y;
    qx=pow(dx, 2);
    qy=pow(dy, 2);
    l= qx+qy;
    line = sqrt(l);
    return line;}
    void show(float ll){
    cout << "L=" << ll<<endl;}
}; Line B;
class Circle : public Line{
public:
virtual float circle (float line){
float ccircle;
ccircle = line*line*3.14;
return ccircle;
}
void show(float cc){
cout << "S=" << cc<< endl;}
}; Circle C;
class Sphere : public Circle{
public:
virtual float sfera(float circle,float line){
float sfrere;
sfrere = circle*line*0.75;
return sfrere;
}
void show(float sh) {
cout << "V="<< sh<<endl;}
}; Sphere D;
int main () {
int x,y,x1,y1;
float line,circle,sphere;
cout << "Point(1):"<< endl;
cout << "Input X= ";
cin >> A.x;
cout << "Input Y= ";
cin >> A.y;
cout << "Point(2):"<<endl;
cout << "Input X2= ";
cin >> A.x1;
cout << "Input Y2= ";
cin >> A.y1;
line = B.Lline(A.x,A.y,A.y1,A.y1);
circle = C.circle(line);
sphere = D.sfera(circle,line);
A.show();
B.show(line);
C.show(circle);
D.show(sphere);
}
}
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
27.04.2012, 14:07     Полиморфный конструктор [C++] #7
Для начала разберитесь с тем, что такое наследование(быть разновидностью чего-либо) и что такое композиция(быть частью чего-либо), и постройте правильную иерархию классов.
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 14:21  [ТС]     Полиморфный конструктор [C++] #8
Ну в данном случае я использую публичное наследование классов. Может я много не понимаю, так как новичок в этом..., Иерархия вроде у меня идет как Point->Line->Circle->Sphere ... Если не правильно, поправьте меня пожалуйста.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
27.04.2012, 14:30     Полиморфный конструктор [C++] #9
Линия не является точкой. Линия содержит две точки (начало и конец).
Круг не является линией. Он содержит точку - центр круга.
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 14:38  [ТС]     Полиморфный конструктор [C++] #10
Круг содержит точку(центр) и линию (радиус). Значит надо в класс Circle наследовать 2 предыдущих класса(Point и Line)? Тогда , каким бы образом сделать правильное наследование? Если можно, то на конкретном примере покажите пожалуйста как это сделать...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
27.04.2012, 14:40     Полиморфный конструктор [C++] #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
struct Point
{
   int x, y;
};
 
struct Line
{
   Point x, y;
};
 
struct Circle
{
   Point center;
   Line radius;
};
Приблизительно. Без функций и без всего.
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 15:01  [ТС]     Полиморфный конструктор [C++] #12
Спасибо. Работает. Теперь бы понять, как использовать здесь виртуальный конструктор...
lamerr
9 / 9 / 1
Регистрация: 05.04.2012
Сообщений: 26
04.06.2013, 13:55     Полиморфный конструктор [C++] #13
Наткнулся на этот топик, позабавило, не у нас одних такие проблемы... У меня тоже (к сожалению) курс ООП ведёт тот же препод, что у Aero93, хочу помочь следующим поколениям понять, как сдать лабы этому "не от мира сего" препу.

1. Полиморфные конструкторы - это (в нормальной терминологии, а не в его) перегруженные конструкторы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Point
{
private:
    int x,y;
public:
    Point();
    Point(int,int);
};
 
Point::Point()
{
    x=0;
    y=0;
}
 
Point::Point(int x,int y)
{
    this->x=x;
    this->y=y;
}
И упаси вас Бог поставить где-то лишний (для компилятора) пробел или фигурную скобку в заголовке поставить - будет сам вручную минут двадцать их сидеть и исправлять эти ужасные недочёты в вашей работе.

2. Не забывайте о том, что существует три (!!!) типа полиморфизма: полиморфизм объектов, методов и конструкторов.

3. Да, действительно нужно сделать эту идиотскую с точки зрения здравого смысла иерархию наследования, чтобы линия наследовалась от точки, какой-нибудь квадрат или что-то в этом духе от линии и т.д.

4. Если не хотите потерять кучу времени на бессмысленные с ним споры, делайте всё один-в-один, как в методичке, несмотря на то, что это можно и получше сделать...

А потом говорят, что уровень образования в стране хреновый
Kojt
73 / 69 / 2
Регистрация: 19.05.2010
Сообщений: 167
04.06.2013, 15:32     Полиморфный конструктор [C++] #14
Есть понятие "полиморфный код" - код прилоежния, которое модифицирует само себя
Больше можно прочитать здесь
Может быть препод хочет нечто подобное?
lamerr
9 / 9 / 1
Регистрация: 05.04.2012
Сообщений: 26
06.06.2013, 20:52     Полиморфный конструктор [C++] #15
Цитата Сообщение от Kojt Посмотреть сообщение
Есть понятие "полиморфный код" - код прилоежния, которое модифицирует само себя
Больше можно прочитать здесь
Может быть препод хочет нечто подобное?
Да, он на это прямо напрашивается, надо будет ему на флэшку в следующий раз скинуть
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
06.06.2013, 20:59     Полиморфный конструктор [C++] #16
Цитата Сообщение от lamerr Посмотреть сообщение
Не забывайте о том, что существует три (!!!) типа полиморфизма: полиморфизм объектов, методов и конструкторов.
Что я только что прочитал?
А можно пример каждого случая?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2013, 21:50     Полиморфный конструктор [C++]
Еще ссылки по теме:

Конструктор класса не видит конструктор по умолчанию другого класса C++
Полиморфный multimap в Windows Forms C++
C++ Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
06.06.2013, 21:50     Полиморфный конструктор [C++] #17
Цитата Сообщение от lamerr Посмотреть сообщение
Полиморфные конструкторы - это (в нормальной терминологии, а не в его) перегруженные конструкторы:
Полиморфизм - это все-таки позднее связывание, и конструкторы сюда никаким образом не относятся. Хотя можно имитировать и виртуальный конструктор

Цитата Сообщение от lamerr Посмотреть сообщение
Не забывайте о том, что существует три (!!!) типа полиморфизма: полиморфизм объектов, методов и конструкторов.
Это что такое?

Цитата Сообщение от lamerr Посмотреть сообщение
Aero93, хочу помочь следующим поколениям
В теме не писали уже больше года
Yandex
Объявления
06.06.2013, 21:50     Полиморфный конструктор [C++]
Ответ Создать тему
Опции темы

Текущее время: 05:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru