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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
#1

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

27.04.2012, 11:19. Просмотров 1634. Ответов 16
Метки нет (Все метки)

Добрый день форумчане! Помогите разобраться, что такое полиморфный конструктор. На рсдн нашел про класс(в себе должен содержать виртуальную функцию\метод\конструктор\деструктор). Случаем конструктор не будет объявляться как виртуальный метод?

Тоесть

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; 
}
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2012, 11:19     Полиморфный конструктор [C++]
Посмотрите здесь:

Конструктор C++
Конструктор C++
Конструктор C++
C++ Конструктор new
Полиморфный наследник от exception C++
C++ this и конструктор
C++ конструктор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
27.04.2012, 11:30     Полиморфный конструктор [C++] #2
Полиморфного конструктора нет и быть не может.
Есть только виртуальный деструктор.
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 11:45  [ТС]     Полиморфный конструктор [C++] #3
Хмммм, тогда наш преподователь совсем рихнулся... В задании написано "Продемонстрируйте использование полиморфных конструкторов и перегруженных функций" Всегда знал, что он не от мира сего. Может тогда он имел ввиду Виртуальный конструктор? больше ничего в голову не приходит...
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
27.04.2012, 13:02     Полиморфный конструктор [C++] #4
Aero93, Нету виртуального конструктора)
rangerx
1921 / 1530 / 139
Регистрация: 31.05.2009
Сообщений: 2,892
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
1921 / 1530 / 139
Регистрация: 31.05.2009
Сообщений: 2,892
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
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 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++ Конструктор
На базе набора функций создать полиморфный класс C++
C++ Создать полиморфный объект и продемонстрировать работу функций

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

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

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

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

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