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

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

Войти
Регистрация
Восстановить пароль
 
LineStown
66 / 66 / 3
Регистрация: 04.08.2010
Сообщений: 420
Завершенные тесты: 1
#1

Преобразование классов - C++

24.05.2012, 11:56. Просмотров 470. Ответов 2
Метки нет (Все метки)

Доброго
Есть небольшая программулина.
Вопрос:
Почему нельзя использовать заккоментированые конструкторы
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
//Преобразования классов
#include<iostream>
using namespace std;
class c2;
class c1
{
private:
    int a,b;
public:
    c1():a(0),b(0){};
    c1(int aa,int bb):a(aa),b(bb){};
/*  c1(c2 p)
    {
        a=p.getq()*2;
        b=p.getq()*4;
    }*/
    int getq()
    {
        return a;
    }
    operator c2();
    void print()
    {
        cout << "c1 " << a  << " " << b << endl;
    }
};
class c2
{
private:
    int a;
public:
    c2():a(0){};
    c2(int aa):a(aa){};
/*  c2(c1 p)
    {
        a=p.getq()/2;
    }*/
    int getq()
    {
        return a;
    }
    operator c1();
    void print()
    {
        cout << "c2 " << a << endl;
    }
};
c1::operator c2()
{
    return c2(a);
}
c2::operator c1()
{
    return c1(a*2,a*4);
}
int main()
{
    setlocale(LC_ALL,"Russian");
    c2 a(5);
    c1 b;
    b=c1(a);
    a.print();
    b.print();
    return EXIT_SUCCESS;
}
Спасибо за внимание
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2012, 11:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразование классов (C++):

Преобразование классов - C++
Есть код для MS VS C++, который переписываю на другой ЯП и не совсем понимаю как преобразовываются объекты. Интересующие части кода....

Преобразование пользовательских классов - C++
у меня есть два класса: class Int; class Compl { float real; float image; public:

Лафоре, преобразование классов - C++
// times1.cpp // программа перевода времени в 24-часовом написании // в 12-часовое #include &lt;iostream&gt; #include &lt;string&gt; using...

Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов - C++
Задание: Разработать в соответствии с индивидуальным заданием иерархию классов и приложение, демонстрирующее работу с коллекцией объектов...

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов) - C++
Тема: Множественное наследование. Явная реализация методов базовых абстрактных классов. Как вынести методы из классов Panel и...

Реализация отношения классов типа двунаправленная ассоциация, UML, порядок объявления классов, неполный класс - C++
Доброго времени суток! Осваивая UML, решил реализовать отношение двунаправленной ассоциации по диаграмме: У одного владельца...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
24.05.2012, 13:03 #2
Цитата Сообщение от LineStown Посмотреть сообщение
Почему нельзя использовать заккоментированые конструкторы
В первом конструкторе: с2 используете по значению, хотя это не полный тип. Т.е. он только объявлен, не определён. Имея только предварительное описание типа можно только объявлять ссылки\указатели на него, обращаться в его членам опять же нельзя - нужно определение. Как то так. С с2 налагогично: с1 - неполный тип. + методы, которые не изменяют состояния объекта надо делать константными. И точек с запятыми лишних куча. Этот же код, который можно скомпилировать:
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
//Преобразования классов
#include<iostream>
 
using namespace std;
 
class c2;
 
class c1
{
private:
    int a, b;
public:
    c1() : a(0), b(0) {} //;
    c1(int aa, int bb) : a(aa), b(bb) {} //;
    c1(c2 const& p);
    int getq() const {
       return a;
    }    
    operator c2() const;
    void print() const {
        cout << "c1 " << a  << " " << b << endl;
    }
};
 
class c2 {
private:
    int a;
public:
    c2() : a(0) {} //;
    c2(int aa) : a(aa) {}//;
    c2(c1 p) {
        a = p.getq() / 2;
    }
    int getq() const
    {
        return a;
    }
    operator c1() const;
    void print() const {
        cout << "c2 " << a << endl;
    }
};
 
c1::operator c2() const {
    return c2(a);
}
c2::operator c1() const {
    return c1(a * 2 ,a * 4);
}
 
c1::c1(c2 const& p) {
    a = p.getq() * 2;
    b = p.getq() * 4;
}
    
 
int main() {
    setlocale(LC_ALL,"Russian");
    c2 a(5);
    c1 b;
    b = c1(a);
    a.print();
    b.print();
    //return EXIT_SUCCESS;
}
1
LineStown
66 / 66 / 3
Регистрация: 04.08.2010
Сообщений: 420
Завершенные тесты: 1
24.05.2012, 15:27  [ТС] #3
То есть, если вынести конструктор за классы, после их полного определения, то получится нормально. Вот теперь все стало на свои места.
Спасибо.
По поводу точек с запятой: неискренимая привычка с паскаля\делфей
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2012, 15:27
Привет! Вот еще темы с ответами:

Преобразования объектов классов в объекты других классов - C++
Задача типа обмен валют. Нужно конвертировать старый фунт стерлинг(фунт, шиллинг и пенсы) в доллары и обратно, по курсу 1 фунт = 50...

Наследование классов. Копирование производных классов - C++
Здравствуйте всем, у меня такой вопрос: написал код #include &quot;stdafx.h&quot; class A //Создаем класс А { int mA; ...

Преобразование классов одной иерархии - C++
Всем привет. Допустим, есть следующая иерархия классов: class B { T data; }; class D1 : public B { // some D1 spec...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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