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

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

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

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

27.04.2012, 11:19. Просмотров 1690. Ответов 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++]
Посмотрите здесь:

Полиморфный наследник от exception - C++
Добрый день. Подскажите как корректно перехватить наследника от exception?? В приведенном ниже коде виртуальный переопределенный метод...

Полиморфный multimap в Windows Forms - C++
Сказали сделать вот такую лабу. Контейнер должен работать с числами, строками и структурами(это ключи). #include "map" #include...

Создать полиморфный объект и продемонстрировать работу функций - C++
Есть классы: class A { public: virtual void f() {} }; class B : public A { public: void f() {

На базе набора функций создать полиморфный класс - C++
#include <iostream> #include <math.h> #include <windows.h> #include <iomanip> using namespace std; bool done = 0; ...

Конструктор - C++
Объясните, пожалуйста, как работает этот код: PhoneBook::PhoneBook(const std::string & filename_ ):filename(filename_){} Весь код...

this и конструктор - C++
Всем привет! Столкнулся с задачей: У класса есть статический указатель, который инициализируется CableTV* CableTV :: ptr = new...

конструктор - C++
enum Color {Null, WHITE, BLACK}; enum Type {Null, King, Peshka}; class Piece { public: Color color; Type type; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.04.2012, 11:30     Полиморфный конструктор [C++] #2
Полиморфного конструктора нет и быть не может.
Есть только виртуальный деструктор.
Aero93
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 11:45  [ТС]     Полиморфный конструктор [C++] #3
Хмммм, тогда наш преподователь совсем рихнулся... В задании написано "Продемонстрируйте использование полиморфных конструкторов и перегруженных функций" Всегда знал, что он не от мира сего. Может тогда он имел ввиду Виртуальный конструктор? больше ничего в голову не приходит...
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.04.2012, 13:02     Полиморфный конструктор [C++] #4
Aero93, Нету виртуального конструктора)
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
27.04.2012, 13:13     Полиморфный конструктор [C++] #5
http://www.parashift.com/c++-faq-lit....html#faq-20.8
Aero93
9 / 9 / 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
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
27.04.2012, 14:07     Полиморфный конструктор [C++] #7
Для начала разберитесь с тем, что такое наследование(быть разновидностью чего-либо) и что такое композиция(быть частью чего-либо), и постройте правильную иерархию классов.
Aero93
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 14:21  [ТС]     Полиморфный конструктор [C++] #8
Ну в данном случае я использую публичное наследование классов. Может я много не понимаю, так как новичок в этом..., Иерархия вроде у меня идет как Point->Line->Circle->Sphere ... Если не правильно, поправьте меня пожалуйста.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.04.2012, 14:30     Полиморфный конструктор [C++] #9
Линия не является точкой. Линия содержит две точки (начало и конец).
Круг не является линией. Он содержит точку - центр круга.
Aero93
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 14:38  [ТС]     Полиморфный конструктор [C++] #10
Круг содержит точку(центр) и линию (радиус). Значит надо в класс Circle наследовать 2 предыдущих класса(Point и Line)? Тогда , каким бы образом сделать правильное наследование? Если можно, то на конкретном примере покажите пожалуйста как это сделать...
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
9 / 9 / 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
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 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++]
Еще ссылки по теме:

Конструктор new - C++
#include &quot;stdafx.h&quot; #include &lt;string&gt; #include &lt;iostream&gt; using namespace std; class IoString{ public: string str; ...

Конструктор - C++
Какие числа выведет если убрать cin &gt;&gt; x &gt;&gt; y; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; using namespace std; class myclass { ...

Конструктор - C++
Скажите, как правлиьно оформить конструктор в этом коде? struct Student { public: Student(Student *s) { cout &lt;&lt;...

Конструктор - C++
Привет всем. Есть тут трудность: изучаю по книжке классы,содержащие другие классы. Есть пример, но в одном месте текст размыт. Похоже что...

Конструктор - C++
скажите пожалуйста зачем в конструкторе мы переменным присваиваем 0? Complex(double r=0,double i=0) { real=r; ...


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

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

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

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

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