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

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

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

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

27.04.2012, 11:19. Просмотров 1705. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2012, 11:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Полиморфный конструктор [C++] (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.04.2012, 11:30 #2
Полиморфного конструктора нет и быть не может.
Есть только виртуальный деструктор.
0
Aero93
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 11:45  [ТС] #3
Хмммм, тогда наш преподователь совсем рихнулся... В задании написано "Продемонстрируйте использование полиморфных конструкторов и перегруженных функций" Всегда знал, что он не от мира сего. Может тогда он имел ввиду Виртуальный конструктор? больше ничего в голову не приходит...
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.04.2012, 13:02 #4
Aero93, Нету виртуального конструктора)
1
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
27.04.2012, 13:13 #5
http://www.parashift.com/c++-faq-lit....html#faq-20.8
1
Aero93
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 13:25  [ТС] #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);
}
}
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
27.04.2012, 14:07 #7
Для начала разберитесь с тем, что такое наследование(быть разновидностью чего-либо) и что такое композиция(быть частью чего-либо), и постройте правильную иерархию классов.
0
Aero93
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 14:21  [ТС] #8
Ну в данном случае я использую публичное наследование классов. Может я много не понимаю, так как новичок в этом..., Иерархия вроде у меня идет как Point->Line->Circle->Sphere ... Если не правильно, поправьте меня пожалуйста.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.04.2012, 14:30 #9
Линия не является точкой. Линия содержит две точки (начало и конец).
Круг не является линией. Он содержит точку - центр круга.
0
Aero93
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 14:38  [ТС] #10
Круг содержит точку(центр) и линию (радиус). Значит надо в класс Circle наследовать 2 предыдущих класса(Point и Line)? Тогда , каким бы образом сделать правильное наследование? Если можно, то на конкретном примере покажите пожалуйста как это сделать...
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.04.2012, 14:40 #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;
};
Приблизительно. Без функций и без всего.
1
Aero93
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 15:01  [ТС] #12
Спасибо. Работает. Теперь бы понять, как использовать здесь виртуальный конструктор...
0
lamerr
9 / 9 / 1
Регистрация: 05.04.2012
Сообщений: 26
04.06.2013, 13:55 #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. Если не хотите потерять кучу времени на бессмысленные с ним споры, делайте всё один-в-один, как в методичке, несмотря на то, что это можно и получше сделать...

А потом говорят, что уровень образования в стране хреновый
0
Kojt
73 / 69 / 2
Регистрация: 19.05.2010
Сообщений: 167
04.06.2013, 15:32 #14
Есть понятие "полиморфный код" - код прилоежния, которое модифицирует само себя
Больше можно прочитать здесь
Может быть препод хочет нечто подобное?
0
lamerr
9 / 9 / 1
Регистрация: 05.04.2012
Сообщений: 26
06.06.2013, 20:52 #15
Цитата Сообщение от Kojt Посмотреть сообщение
Есть понятие "полиморфный код" - код прилоежния, которое модифицирует само себя
Больше можно прочитать здесь
Может быть препод хочет нечто подобное?
Да, он на это прямо напрашивается, надо будет ему на флэшку в следующий раз скинуть
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2013, 20:52
Привет! Вот еще темы с ответами:

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром? - C++
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1) : x(y) {} };

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно» - C++
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по умолчанию, конструктор с параметрами....

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;math.h&gt; #include &lt;algorithm&gt; using...

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно? - C++
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.06.2013, 20:52
Ответ Создать тему
Опции темы

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