Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2025, 18:43   #1
Мустафа72573652
Новичок
Джуниор
 
Регистрация: 26.02.2025
Сообщений: 2
Печаль как на C++ класс объявленный раньше видел класс объявленный позже?

Код:
#include <iostream>
#include <string>
using namespace std;
class Dog;
class Cat{
private:
 Dog &m_b;
 string name;
public:
 Cat(string &b){name=b;}
 Cat(Dog &m_b){name=b;}
 string & get_name(){ return name;}
 void hello(Cat &b){
 string t="Hello, I'm "+name+", and I "+b.name;
 cout<<t<<endl;
 void hello(Dog &b){
 string t="Hello, I'm "+name+", and I "+b.name;
 cout<<t<<endl;
 }
};
class Dog{
private:
 string name;
public:
 Dog(string &b){name=b;}
 string & get_name(){ return name;}
 void hello(Dog &b){
 string t="Hello, I'm "+name+", and I "+b.name;
 cout<<t<<endl;
 }
 void hello(Cat &b){
 string t="Hello, I'm "+name+", HM, I am CAT "+b.get_name();
 cout<<t<<endl;
 }
 friend class Cat;
};
class Human{
private:
 string name;
public:
 Human(string &b){name=b;}
 string & get_name(){ return name;}
 void hello(Human &b){
 string t="Hello, I'm "+name+", and I "+b.name;
 cout<<t<<endl;
 }
 void hello(Dog &b){
 string t="Hello, I'm "+name+", HM, I am DOG "+b.get_name();
 cout<<t<<endl;
 }
 void hello(Cat &b){
 string t="Hello, I'm "+name+", HM, I am CAT "+b.get_name();
 cout<<t<<endl;
 }
};
int main()
{
 string in1="Sharik", in2="Tuzik";
 Dog d1(in1), d2(in2);
 in1="Barsik"; in2="Murzik";
 Cat c1(in1), c2(in2);
 in1="Micl"; in2="Amelina";
 Human h1(in1), h2(in2);
 cout<<c1.get_name()<<endl;
 cout<<d1.get_name()<<endl;
 cout<<h1.get_name()<<endl;
 d1.hello(c2);
 h1.hello(h2);
 h1.hello(c1);
 h1.hello(d2);
 return 0;
}
как сделать чтобы класс Cat видел класс Dog?
Мустафа72573652 вне форума Ответить с цитированием
Старый 26.02.2025, 18:59   #2
Алексей1153
фрилансер, препод.
Участник клуба
 
Регистрация: 11.10.2019
Сообщений: 1,043
По умолчанию

Мустафа72573652,
нужно вынести определение метода из класса Cat и разместить после класса Dog

Код:
void Cat::hello(Dog &b)
{
    string t="Hello, I'm "+name+", and I "+b.name;
    cout<<t<<endl;
}
но в коде ещё много лютого треша, так что это всё равно не скомпилится

Для начала - нужно исправить хотя бы форматирование кода, чтобы глаза не болели
Алексей1153 вне форума Ответить с цитированием
Старый 26.02.2025, 19:03   #3
Алексей1153
фрилансер, препод.
Участник клуба
 
Регистрация: 11.10.2019
Сообщений: 1,043
По умолчанию

вот, до компилябельности довёл. В логику и правильность работы - даже не пытался вникать, это сам

Код:
#include <iostream>
#include <string>
using namespace std;
class Dog;
class Cat
{
private:
    Dog &m_b;
    string name;
public:
    Cat(Dog &m_b, const std::string& name) : m_b{m_b}, name{name}
    {
     
    }

    string & get_name(){ return name;}
    void hello(Cat &b)
    {
        string t="Hello, I'm "+name+", and I "+b.name;
        cout<<t<<endl;
    }
    void hello(Dog &b);
};

class Dog{
private:
 string name;
public:
 Dog(string &b){name=b;}
 string & get_name(){ return name;}
 void hello(Dog &b){
 string t="Hello, I'm "+name+", and I "+b.name;
 cout<<t<<endl;
 }
 void hello(Cat &b){
 string t="Hello, I'm "+name+", HM, I am CAT "+b.get_name();
 cout<<t<<endl;
 }
 friend class Cat;
};

void Cat::hello(Dog &b)
{
    string t="Hello, I'm "+name+", and I "+b.name;
    cout<<t<<endl;
}
 
class Human{
private:
 string name;
public:
 Human(string &b){name=b;}
 string & get_name(){ return name;}
 void hello(Human &b){
 string t="Hello, I'm "+name+", and I "+b.name;
 cout<<t<<endl;
 }
 void hello(Dog &b){
 string t="Hello, I'm "+name+", HM, I am DOG "+b.get_name();
 cout<<t<<endl;
 }
 void hello(Cat &b){
 string t="Hello, I'm "+name+", HM, I am CAT "+b.get_name();
 cout<<t<<endl;
 }
};
int main()
{
    std::string in1="Sharik";
    std::string in2="Tuzik";
    Dog d1(in1);
    Dog d2(in2);
    
    in1="Barsik"; in2="Murzik";
    Cat c1(d1,in1);
    Cat c2(d1,in2);
    
    in1="Micl"; in2="Amelina";
    Human h1(in1);
    Human h2(in2);
    
    cout<<c1.get_name()<<endl;
    cout<<d1.get_name()<<endl;
    cout<<h1.get_name()<<endl;
    d1.hello(c2);
    h1.hello(h2);
    h1.hello(c1);
    h1.hello(d2);
}
https://onlinegdb.com/dOUQ0T7WQ
Алексей1153 вне форума Ответить с цитированием
Старый 26.02.2025, 19:06   #4
Мустафа72573652
Новичок
Джуниор
 
Регистрация: 26.02.2025
Сообщений: 2
По умолчанию

Алексей1153, спасибо большое, а в коде я проверял другие методы спасибо большое
Мустафа72573652 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание классов - Имеется класс город. Класс область содержит массив городов. Класс область содержит метод, который осуществляет поиск города по его названию. martofpain C# (си шарп) 5 23.12.2019 07:57
С# Использовать массив,объявленный в Main в private static void WhySeven??? Помощь студентам 0 25.04.2018 21:19
Массив, объявленный как двумерный, является одномерным WarAngel-alk Общие вопросы C/C++ 2 17.03.2013 15:37
Добавить класс в проект2,похожий на класс из проекта1!оба проекта есть! xeops C# (си шарп) 0 15.05.2012 20:31
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24