С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
27 / 26 / 6
Регистрация: 22.03.2014
Сообщений: 277
1

Объект класса в классе

18.01.2015, 21:07. Показов 1528. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Товарищи, помогите уже не знаю что делать!! Есть класс Point и класс Pixel, есть методы и там и там. В классе Pixel создаю объект типа Point => Point p; И вызываю для p объекта методы класса Pixel (пытаюсь тут то и ошибка), а их нет в списке доступных методов. Помогите пожалуйста разобраться.

point.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef POINT_H
#define POINT_H
 
class Point
{
    int x;
    int y;
    void Print() const;
public:
    friend double fDist (const Point &, const Point &);
    Point(const Point &);
 
    Point(); 
    /*explicit*/ Point(int);
    Point(int,int);
 
    //Point(int=0, int=0);
    ~Point();
 
};
 
 
#endif


Pixel.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once
#include "point.h"
 
class Pixel
{
public:
    enum Color {black, blue, green, red=4, yellow=14, white};
    Pixel(int=0, int=0, const Color& =black);
    Pixel(const Point &, const Color& =black);
    ~Pixel();
 
    const Color & Get_color()const;
    void Set_color(const Color &);
 
    void Move(int delta_x, int delta_y);
    double Dist(const Pixel &)const;
 
    void Print()const;
private:
    Point p; //вот он объект типа Point
    Color c;
};


Pixel.cpp
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include "Pixel.h"
 
using namespace std;
 
Pixel::Pixel(int x, int y, const Color &clr)
    : p(x,y), c(clr)
{}
Pixel::Pixel(const Point &pt, const Color &clr)
    : p(pt), c(clr)
{}
Pixel::~Pixel()
{}
 
const Pixel::Color & Pixel::Get_color()const
{
    return c;
}
void Pixel::Set_color(const Color &clr)
{
    c=clr;
}
void Pixel::Move(int delta_x, int delta_y)
{
    p.Move(delta_x, delta_y);                      //error
}
double Pixel:: Dist(const Pixel &px)const
{
    return p.Dist(px.p);                             //error
}
void Pixel::Print()const
{
    p.Print();                                         //error  
    cout<<c;
}


point.cpp
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cmath>
#include "point.h"
 
using namespace std;
 
Point::Point()
{
    x=0;
    y=0;
    //for debug
    cout<<"Point(): "; 
    Print (); 
    cout<<endl;
}
Point::Point(int _x, int _y)
{
    x=_x; //использовать сетеры и гетеры
    y=_y; //
    //for debug
    cout<<"Point(int, int): "; 
    Print (); 
    cout<<endl;
}
Point::Point(int _x)
{
    x=_x; //использовать сетеры и гетеры
    y=0; //
    //for debug
    cout<<"Point(int): "; 
    Print (); 
    cout<<endl;
}
Point::Point(Point const &other)
{
    x=other.x;
    y=other.y;
    //for debug
    cout<<"Point(Point const &): "; 
    Print (); 
    cout<<endl;
}
Point::~Point()
{
    //for debug
    cout<<"~Point(): "; 
    Print (); 
    cout<<endl;
}
void Point::Print() const
{
    cout<<x<<", "<<y;
}
double fDist (const Point &a, const Point &b)
{
    return sqrt(pow(static_cast<double>(a.x-b.x),2
        +pow(static_cast<double>(a.y-b.y),2)));
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.01.2015, 21:07
Ответы с готовыми решениями:

У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B?
#include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; //Вот главный класс class A{...

Объект класса в другом классе
Здравствуйте! Недавно начал учить классы, прошу помогите мне. Мой написанный код не работает....

Создать объект шаблонного класса в другом классе
Как создать объект шаблонного класса в другом классе и вызвать через этот объект функцию? class...

Использование указателя на объект шаблонного класса в шаблонном классе.
Всем привет! Мне нужно реализовать граф. Начал с вершин и ребер, причем и ребра и вершины -...

5
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.01.2015, 21:23 2
Лучший ответ Сообщение было отмечено Mikhail1990 как решение

Решение

Так зачем вызываешь те методы, которых у класса нет?
1
27 / 26 / 6
Регистрация: 22.03.2014
Сообщений: 277
18.01.2015, 21:25  [ТС] 3
nmcf, делаю все по видео уроку (но там 2008 студия и 2011 год) у него все работает. Надо наследовать?
0
12 / 12 / 3
Регистрация: 20.09.2012
Сообщений: 75
18.01.2015, 21:38 4
C++
1
2
3
4
void Pixel::Move(int delta_x, int delta_y)
{
    p.Move(delta_x, delta_y);                      //error
}
этот метод совсем не знает что такое 'p'
1
27 / 26 / 6
Регистрация: 22.03.2014
Сообщений: 277
18.01.2015, 21:39  [ТС] 5
Murad93, а как сделать что бы узнал?
0
12 / 12 / 3
Регистрация: 20.09.2012
Сообщений: 75
18.01.2015, 22:56 6
Я не совсем прав - nmcf корректнее выразил мысль.
В Pixel::Print вы вызываете private-метод Point::Print - т.е. он наверно должен быть public

Pixel::Move пытается вызвать Point::Move, но в классе Point нет такого метода

Pixel:: Dist то же самое

Добавлено через 8 минут
В Pixel::Print :
cout<<c; - так нельзя, если 'c' - это 'Color c' в классе Pixel

Можно либо вывести public поле
cout << c.x; например (если x инициализирована)
либо для Color нужен свой метод вроде Print
1
18.01.2015, 22:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2015, 22:56
Помогаю со студенческими работами здесь

Как в классе А у объекта класса B вызвать метод класса B ?
Есть Класс A и класс B . В классе B лежит объект типа ArrayList , назовём его arrayList, в этом же...

Как сложить объект базового класса с объектом производного(наследуемого класса)
Как умножить объект базового класса с объектом производного(наследуемого класса): ozenka - объект...

Можно ли создать объект класса с таким же именем как у самого класса?
Можно ли создать объект класса с таким же именем как у самого класса? Ну или как то обойти эту...

Почему объект производного класса не видит префиксный оператор из базового класса?
Короче создал я базовый класс с перегруженным префиксным оператором ++. Потом чтоб его...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru