Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35

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

27.04.2012, 11:19. Показов 5752. Ответов 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; 
}
};
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2012, 11:19
Ответы с готовыми решениями:

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

Как создать полиморфный массив?
Есть классы A, B, C. А - класс-родитель. B и C дочерние, наследуют от него полный функционал. Как создать массив, который будет в себе...

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

16
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.04.2012, 11:30
Полиморфного конструктора нет и быть не может.
Есть только виртуальный деструктор.
0
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 11:45  [ТС]
Хмммм, тогда наш преподователь совсем рихнулся... В задании написано "Продемонстрируйте использование полиморфных конструкторов и перегруженных функций" Всегда знал, что он не от мира сего. Может тогда он имел ввиду Виртуальный конструктор? больше ничего в голову не приходит...
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.04.2012, 13:02
Aero93, Нету виртуального конструктора)
1
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
27.04.2012, 13:13
http://www.parashift.com/c++-f... l#faq-20.8
1
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 13:25  [ТС]
Спасибо. Но как тогда его использовать в данном случае?

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);
}
}
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
27.04.2012, 14:07
Для начала разберитесь с тем, что такое наследование(быть разновидностью чего-либо) и что такое композиция(быть частью чего-либо), и постройте правильную иерархию классов.
0
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 14:21  [ТС]
Ну в данном случае я использую публичное наследование классов. Может я много не понимаю, так как новичок в этом..., Иерархия вроде у меня идет как Point->Line->Circle->Sphere ... Если не правильно, поправьте меня пожалуйста.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.04.2012, 14:30
Линия не является точкой. Линия содержит две точки (начало и конец).
Круг не является линией. Он содержит точку - центр круга.
0
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 14:38  [ТС]
Круг содержит точку(центр) и линию (радиус). Значит надо в класс Circle наследовать 2 предыдущих класса(Point и Line)? Тогда , каким бы образом сделать правильное наследование? Если можно, то на конкретном примере покажите пожалуйста как это сделать...
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.04.2012, 14:40
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;
};
Приблизительно. Без функций и без всего.
1
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 15:01  [ТС]
Спасибо. Работает. Теперь бы понять, как использовать здесь виртуальный конструктор...
0
9 / 9 / 0
Регистрация: 05.04.2012
Сообщений: 26
04.06.2013, 13:55
Наткнулся на этот топик, позабавило, не у нас одних такие проблемы... У меня тоже (к сожалению) курс ООП ведёт тот же препод, что у 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. Если не хотите потерять кучу времени на бессмысленные с ним споры, делайте всё один-в-один, как в методичке, несмотря на то, что это можно и получше сделать...

А потом говорят, что уровень образования в стране хреновый
0
73 / 69 / 1
Регистрация: 19.05.2010
Сообщений: 167
04.06.2013, 15:32
Есть понятие "полиморфный код" - код прилоежния, которое модифицирует само себя
Больше можно прочитать здесь
Может быть препод хочет нечто подобное?
0
9 / 9 / 0
Регистрация: 05.04.2012
Сообщений: 26
06.06.2013, 20:52
Цитата Сообщение от Kojt Посмотреть сообщение
Есть понятие "полиморфный код" - код прилоежния, которое модифицирует само себя
Больше можно прочитать здесь
Может быть препод хочет нечто подобное?
Да, он на это прямо напрашивается, надо будет ему на флэшку в следующий раз скинуть
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
06.06.2013, 20:59
Цитата Сообщение от lamerr Посмотреть сообщение
Не забывайте о том, что существует три (!!!) типа полиморфизма: полиморфизм объектов, методов и конструкторов.
Что я только что прочитал?
А можно пример каждого случая?
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
06.06.2013, 21:50
Цитата Сообщение от lamerr Посмотреть сообщение
Полиморфные конструкторы - это (в нормальной терминологии, а не в его) перегруженные конструкторы:
Полиморфизм - это все-таки позднее связывание, и конструкторы сюда никаким образом не относятся. Хотя можно имитировать и виртуальный конструктор

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

Цитата Сообщение от lamerr Посмотреть сообщение
Aero93, хочу помочь следующим поколениям
В теме не писали уже больше года
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.06.2013, 21:50
Помогаю со студенческими работами здесь

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

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

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

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор)
class Test { int i; public: void test(int i) { this -&gt; i = i; } }; Конструктор Test::Test всегда вызывается...

Конструктор класса, конструктор копирования запускается не тот который нужен
Есть такой конструктор: Neuron::Neuron(int iType_activation_funk) { this-&gt;iType_act = iType_activation_funk; switch...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru