1

Тема: Клас трикутника

Мені потрібно виконати завдання "створити клас трикутника".
https://lh6.googleusercontent.com/-J10tuA6jEg4/VBSWXza-8wI/AAAAAAAAAG0/P6pC8eu9BAg/w690-h248-no/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA.JPG
Я хочу щоб користувач ввів три сторони.Далі йому виведе на екран  три сторони(які він ввів) ,периметр та площа.
Але на жаль раніше я ніколи не використовував класи!Прийшов в інститут і тепер не знаю як це зробити!
Ось моя спроба створити проект. Якщо хтось може дати корисні поради, або ссилку на літературу буду дуже вдячний!

#include "stdafx.h"
#include <iostream>
using namespace std;

class ABC;
{
public:
int data (int storona);


};


int _tmain(int argc, _TCHAR* argv[])
{
    ABC a,b,c;
    a.selectdata (1);
    b.selectdata (2);
    c.selectdata (3);
    a.showdata ();
    b.showdata ();
    c.showdata ();
    return 0;
}

Дякую за увагу!

2

Re: Клас трикутника

Літературу беріть будь-яку. Щодо загального розуміння можу дати пораду: пишіть так, ніби розписуєте словник для чужопланетян. Класи - це іменники, функції - дієслова. Вам треба створити клас "трикутник"? Ну то зазирніть в словник і так і напишіть: трикутник - це щось, що має 3 сторони.

class Triangle
{
  double a, b, c;
};

ну і далі по завданню...

Подякували: Arete1

3

Re: Клас трикутника

Клас - це представлення деякого об’єкта. Трикутник можна представити як набір із трьох точок. Сказано - зроблено:

class Triangle{
    private:
    int x1, y1, x2, y2, x3, y3;
    public:
    void Triangle();
    virtual void ~Triangle();
};

Від такого класу користі мало, тому що мало представити об’єкт, з ним потрібно ще щось робити. Додаємо необхідні методи:

class Triangle{
    private:
    int x1, y1, x2, y2, x3, y3;
    public:
    void Triangle();
    virtual void ~Triangle();
    void getData();
    void setData();
    int area();
    int perimeter();
};

Не можу не сказати, що людина, яка складала завдання, не розуміє, нащо потрібні класи і як їх використовувати. Що Студент, що Трикутник не повинні знати ні про клавіатуру, ні про вивід в консоль. Трикутник знає про координати вершин, про свою площу, свої геометричні властивості. Але не більше. Тому краще будемо гратись з виводом в іншому місці.

class Triangle{
    private:
    int x1, y1, x2, y2, x3, y3;
    public:
    void Triangle();
    virtual void ~Triangle();
    int* getVertices();
    void setVertices(int x1, int y1, int x2, int y2, int x3, int y3);
    int area();
    int perimeter();
};

4

Re: Клас трикутника

quez написав:
class Triangle{
    private:
    int x1, y1, x2, y2, x3, y3;
    public:
    void Triangle();
    virtual void ~Triangle();
    int* getVertices();
    void setVertices(int x1, int y1, int x2, int y2, int x3, int y3);
    int area();
    int perimeter();
};

а чому шість змінних у типу int?
що це значить?

 virtual void ~Triangle();
    int* getVertices();
    void setVertices(int x1, int y1, int x2, int y2, int x3, int y3);

5

Re: Клас трикутника

а чому шість змінних у типу int?

Три вершини, у кожної по дві координати.

що це значить?

1. Деструктор. Я трохи захопився, він не має відношення до задачі.
2. Метод, який повертає координати вершин.
3. Метод, який встановлює координати вершин.

6

Re: Клас трикутника

quez написав:

а чому шість змінних у типу int?

Три вершини, у кожної по дві координати.

що це значить?

1. Деструктор. Я трохи захопився, він не має відношення до задачі.
2. Метод, який повертає координати вершин.
3. Метод, який встановлює координати вершин.

В принципі має,якщо є конструктор,то краще потім його знищувати аби звільнити память.

7

Re: Клас трикутника

Зрозуміло, але на жаль мій викладач це не оцінить.Вона прискіплива.Скаже переробляти доки їй не сподобається.
А чому тут пусте значення?
void getData();
void setData();

та яка різниця,якщо використовувати це?
selectdata
showdata

8

Re: Клас трикутника

та яка різниця,якщо використовувати це?

Ніякої, в принципі.

9

Re: Клас трикутника

Ось робив я,але все одно вийшло не щось не те.

#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

class Triangle
{
protected:
    double a,b,c,perimetr;

public:
    void selectdata ()
    {
        cout <<"сторонга a"<<a<<endl;
        cin>>a;
        cout <<"сторонга b"<<b<<endl;
        cin>>b;
        cout <<"сторонга c"<<c<<endl;
        cin>>c;
        perimetr=a+b+c;
        cout <<"perimetr"<<perimetr<<endl;
    }
    void showdata ()
    {
            cout <<"сторонга a"<<a<<"сторонга b"<<b<<"сторонга c"<<c<<"сторонга c"<<c<<"perimetr"<<perimetr<<endl;
    }

};


int _tmain(int argc, _TCHAR* argv[])
{
    Triangle s1,s2,s3;
    s1.selectdata (101);
    s2.selectdata (102);
    s3.selectdata (103);
    s1.showdata ();
    s2.showdata ();
    s3.showdata ();
    getch ();
    return 0;
}

список помилок.

Прихований текст

Ошибка    1    error C2660: Triangle::selectdata: функция не принимает 1 аргументов    d:\cpp\new\consoleapplication13\consoleapplication13\consoleapplication13.cpp    38
Ошибка    3    error C2660: Triangle::selectdata: функция не принимает 1 аргументов    d:\cpp\new\consoleapplication13\consoleapplication13\consoleapplication13.cpp    39
Ошибка    4    error C2660: Triangle::selectdata: функция не принимает 1 аргументов    d:\cpp\new\consoleapplication13\consoleapplication13\consoleapplication13.cpp    40
Ошибка    2    error MSB6006: "CL.exe" завершилась с кодом 2.    C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets    347
    5    IntelliSense: слишком много аргументов в вызове функции    d:\CPP\new\ConsoleApplication13\ConsoleApplication13\ConsoleApplication13.cpp    38
    6    IntelliSense: слишком много аргументов в вызове функции    d:\CPP\new\ConsoleApplication13\ConsoleApplication13\ConsoleApplication13.cpp    39
    7    IntelliSense: слишком много аргументов в вызове функции    d:\CPP\new\ConsoleApplication13\ConsoleApplication13\ConsoleApplication13.cpp    40

10

Re: Клас трикутника

І чому ви дивуєтесь? Оголошуєте showdata(), а викликаєте showdata(101).

11 Востаннє редагувалося KrolikTon (14.09.2014 13:08:04)

Re: Клас трикутника

Мені потрібно створити для кожної змінної showdata і правильно її оголосити,вірно?Як це вірно записати?

12

Re: Клас трикутника

KrolikTon написав:

Мені потрібно створити для кожної змінної showdata і правильно її оголосити,вірно?Як це вірно записати?

Ні, в попередньому моєму повідомленні showdata потрібно читати як selectdata.
В main’і ви намагаєтесь передати якісь числа в selectdata, а цей метод оголошений як такий, що не приймає параметрів.

13

Re: Клас трикутника

Так як це все зробити?Я навіть уявлення не маю!

14

Re: Клас трикутника

на php я б зробив би щось таке)

class Student {

public $a;
public $b;
public $c;

function __construct($a,$b,$c) {
      $this->a = (double)$a;
      $this->b = (double)$b;
      $this->c = (double)$c;
 }

function setData() {
$P = $this->a + $this->b + $this->c;
print("Периметр: $P см\n");
$S = sqrt($P * ($P-$this->a) * ($P-$this->b) * ($P-$this->c));
print("Площа: $S см.кв\n");
}

function getData() {
return $this->setData();
}

function __destruct() {}

}

$storona_A = 3;
$storona_B = 8;
$storona_c = 7;

$Triangle = new Student($storona_A,$storona_B,$storona_C);
echo $Triangle->getData();

15

Re: Клас трикутника

VTrim написав:

на php я б зробив би щось таке)

class Student {

public $a;
public $b;
public $c;

function __construct($a,$b,$c) {
      $this->a = (double)$a;
      $this->b = (double)$b;
      $this->c = (double)$c;
 }

function setData() {
$P = $this->a + $this->b + $this->c;
print("Периметр: $P см\n");
$S = sqrt($P * ($P-$this->a) * ($P-$this->b) * ($P-$this->c));
print("Площа: $S см.кв\n");
}

function getData() {
return $this->setData();
}

function __destruct() {}

}

$storona_A = 3;
$storona_B = 8;
$storona_c = 7;

$Triangle = new Student($storona_A,$storona_B,$storona_C);
echo $Triangle->getData();

Тепер я ще більше запутався,коли думав як це перевести  с++.)

16

Re: Клас трикутника

Прихований текст
// Опис класу "Трикутник"
class Triangle {
    /* Варіант зі сторонами */
    private:
        float a = 0;
        float b = 0;
        float c = 0;

    /* Варіант з координатами сторін */
    private:
        float x1, x2, x3;
        float y1, y2, y3;

    /* Опис методів класу */
    public:
        void Triangle();      // Конструктор без параметрів
        void Triangle(float _a, float _b float _c);      // Конструктор з параметрами
        void ~Triangle();     // Деструктор

        void setData();          // Метод введення даних
        void getData();          // Метод виведення даних

        float getSquare();    // Метод обрахунку та виведення значення площі
        float getPerimeter(); // Метод обрахунку та виведення значення периметру
}

// Реалізація методів класу "Трикутник"
void Triangle() {}

void Triangle(float _a, float _b float _c) {
    a = _a;
    b = _b;
    c = _c;
}

void ~Triangle() {}

void setData() {
    /* Введення даних */
}

void getData() {
    /* Виведення даних */
}

float getSquare() {
    return /* Формула площі */    
}

float getPerimeter() {
    return /* Формула периметру */
}

// Робота з класом "Трикутник"

int main {
    Triangle firstTriangle;                     // Створення об’єкту класа "Triangle" через фактичний параметр
    Triangle* secondTriangle = new Triangle();    // Створення об’єкту класа "Triangle" через вказівник

    /* Відповідно для того, щоб викликати методи для об’єкта, який створений через фактивний параметр використовують крапку (’.’) */
    firstTriangle.setData();

    /* А для об’єкта, який створений через вказівник використовують стрілочку (’->’) */
    secondTriangle -> setData();

    /* Ну і далі викликаєте методи, які вам потрібні для роботи */

    return 0;
}

Розписав вже як міг.
P.S. Давно вже не писав на С++ тому можуть бути помилки. В процесі виконання вже будете виправляти самі.
P.S.S. Якщо є невідомі слова типу Конструктор/Деструктор/Методи - гугліть.

Подякували: ventyki1