Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование 
:(
    Опции темы
Кли
Дата 14.12.2018, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 20.11.2016

Репутация: нет
Всего: нет



Здравствуйте!!! Написал наследование, но препод сказал что то в классе квадрат не хватает, помогите разобраться
Код

#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <windows.h>
using namespace std;
class Point    
{
public:
    double x;
    double y;
Point(double a,double b)
    {
        x = a;
        y = b;
    }
    Point()
    {
        x = 0;
        y = 0;
    }
    double GetX()
    {
        return x;
    }
    double GetY()
    {
        return y;
    }
    void SetX(double a)
    {
        x = a;
    }
    void SetY(double a)
    {
        y = a;
    }
};
class rectangle  
{                    
protected:            
    Point A;        
    Point B;                                      
    Point C;
    Point D;
public:
    rectangle()
    {
        A = Point();
        B = Point();
        C = Point();
        D = Point();
    }
    rectangle(Point a, Point b, Point c, Point d)
    {
        A.SetX(a.GetX());
        A.SetY(a.GetY());

        B.SetX(b.GetX());
        B.SetY(b.GetY());

        C.SetX(c.GetX());
        C.SetY(c.GetY());

        D.SetX(d.GetX());
        D.SetY(d.GetY());
    }
    double GetArea()
    {
        double a = sqrt(double((A.x - C.x)*(A.x - C.x) + (A.y - C.y)*(A.y - C.y)));
        double b = sqrt(double((A.x - B.x)*(A.x - B.x) + (A.y - B.y)*(A.y - B.y))); 
        double area = a*b;
        return area;
    }
};

class square :public rectangle
{
    double Side;
    double Base;
public :
    square(double side, double base) :rectangle(A,B,C,D)
    {                             
        Side = side;
        Base = base;
    }
    double GetArea()
    {
        double a = sqrt(double((A.x - C.x)*(A.x - C.x) + (A.y - C.y)*(A.y - C.y)));
        double area = a*a;
        return area;
    }
};
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);    
    Point a = Point(2, 3);
    Point b = Point(4, 7);
    Point c = Point(10, 1);
    Point d = Point(5, 3);
    rectangle AS = rectangle(a, b, c, d);
    cout <<"Площадь прямоугольника: " << AS.GetArea() << endl;

    Point A = Point(2, 3);
    square Z = square(10,5);
    cout <<"Площадь квадрата: " << Z.GetArea() << endl;
    system("pause");
    return 0;
}

PM MAIL   Вверх
kapbepucm
Дата 14.12.2018, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Вероятно, ему не понравилось, что нигде не задаются координаты вершин квадрата, но, тем не менее, в строке 88 вы обращаетесь к ним.

Это сообщение отредактировал(а) kapbepucm - 14.12.2018, 13:44


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Кли
Дата 14.12.2018, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 20.11.2016

Репутация: нет
Всего: нет



а формулу вычисления правильно записал, для прямоугольника и квадрата, просто для прямоугольника что выдает численно, а для квадрата площадь выводит нуль
препод сказал что-то вроде в квадрате конструктор нужен, иначе он у тебя как то сам по себе
PM MAIL   Вверх
kapbepucm
Дата 14.12.2018, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Формула может и верная, но в ней есть обращения к (я конкретно про класс "square", метод "GetArea"):
A.x
C.x
A.y
C.y
Кто эти переменные заполнял, перед тем, как к ним обращаться?
Их стОит каким либо образом определять в конструкторе "square"

Это сообщение отредактировал(а) kapbepucm - 14.12.2018, 15:38


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Кли
Дата 14.12.2018, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 20.11.2016

Репутация: нет
Всего: нет



а можете сделать как надо?
PM MAIL   Вверх
kapbepucm
Дата 14.12.2018, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



А логику кода менять можно? Я, например, не вижу смысла в конструкторе задавать 4 координаты, я бы задал одну, а также высоту и ширину.

Это сообщение отредактировал(а) kapbepucm - 14.12.2018, 15:52


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Кли
Дата 14.12.2018, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 20.11.2016

Репутация: нет
Всего: нет



Можно, если так будет правильнее
PM MAIL   Вверх
kapbepucm
Дата 14.12.2018, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Ну, правильность- понятие растяжимое smile Зависит от задачи
Код
#include <iostream>
#include <cmath>

#include "stdafx.h"
#include <windows.h>


using namespace std;
class Point    
{
public:
  int x;
  int y;
  Point(int a, int b)
  {
    x = a;
    y = b;
  }
  Point()
  {
    x = 0;
    y = 0;
  }
  int GetX()
  {
    return x;
  }
  int GetY()
  {
    return y;
  }
  void SetX(int a)
  {
    x = a;
  }
  void SetY(int a)
  {
    y = a;
  }
};
class rectangle  
{
protected:      
  Point A;
  int a;
  int b;
public:
  rectangle(Point pos, int a, int b)
  {
    A.SetX(pos.GetX());
    A.SetY(pos.GetY());
    this->a = a;
    this->b = b;
  }
  int GetArea()
  {
    return a*b;
  }
};

class square :public rectangle
{
public :
  square(Point pos, int height): rectangle(pos, height, height)
  {}
};
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251); 
  Point A = Point(2, 3);
  rectangle AS = rectangle(A, 10, 20);
  cout << "Площадь прямоугольника: " << AS.GetArea() << endl;
  square Z = square(A, 10);
  cout << "Площадь квадрата: " << Z.GetArea() << endl;
  system("pause");
  return 0;
}


Это сообщение отредактировал(а) kapbepucm - 14.12.2018, 16:15


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Кли
Дата 14.12.2018, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 20.11.2016

Репутация: нет
Всего: нет



спасибо большое
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1283 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.