• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Metody set i get w macierzy c++

Object Storage Arubacloud
0 głosów
1,328 wizyt
pytanie zadane 20 marca 2019 w C i C++ przez eSpring Początkujący (270 p.)

Witam, chciałbym się w jaki sposób mógłbym użyć metod set() i get(), odnoszących się do prywatnej składowej tablicy 3x3.

//mat3.hpp

class mat3 {
public:
	mat3();	//Zadaniem konstruktora jest zerowanie tablicy za pomoca podwojnej petli
	mat3(float v11, float v12, float v13,
		float v21, float v22, float v23,
		float v31, float v32, float v33); // Konstruktor z argumentami
	
	void print(); //Metoda wyswietlajaca macierz o rozmiarze 3x3

private:
    float data[3][3];	
};

Proszę o pomoc :) Pozdrawiam

2 odpowiedzi

+1 głos
odpowiedź 20 marca 2019 przez mokrowski Mędrzec (155,460 p.)
edycja 20 marca 2019 przez mokrowski

Co do zasady, tak:

#include <iostream>
#include <cstddef>

class mat3 {
public:
    mat3(); //Zadaniem konstruktora jest zerowanie tablicy za pomoca podwojnej petli
    mat3(float v11, float v12, float v13,
        float v21, float v22, float v23,
        float v31, float v32, float v33); // Konstruktor z argumentami

    void print() const; //Metoda wyswietlajaca macierz o rozmiarze 3x3

    float * operator[](std::size_t rowIndex);

    float get(std::size_t colIndex, std::size_t rowIndex) const;
    void set(std::size_t colIndex, std::size_t rowIndex, float value);

private:
    float data[3][3];
};

mat3::mat3() {
    for(auto& row: data) {
        for(auto& field: row) {
            field = 0;
        }
    }
}

mat3::mat3(float v11, float v12, float v13,
        float v21, float v22, float v23,
        float v31, float v32, float v33)
    : data{
        {v11, v12, v13},
        {v21, v22, v23},
        {v31, v32, v33}
    } {
}

void mat3::print() const {
    for(auto& row: data) {
        for(auto& field: row) {
            std::cout << field << ' ';
        }
        std::cout << '\n';
    }
}

float * mat3::operator[](std::size_t rowIndex) {
    return data[rowIndex];
}

void mat3::set(std::size_t colIndex, std::size_t rowIndex, float value) {
    data[rowIndex][colIndex] = value;
}

float mat3::get(std::size_t colIndex, std::size_t rowIndex) const {
    return data[rowIndex][colIndex];
}

int main() {
    mat3 m{1,2,3,4,5,6,7,8,9};
    std::cout << "My matrix:\n";
    m.print();
    std::cout << "Access:\n";
    std::cout << "[1][2] -> " << m[0][1] << '\n';
    std::cout << "[3][3] -> " << m[2][2] << '\n';
    std::cout << "Insert 100 in m[1][1]\n";
    m[0][0] = 100;
    std::cout << "Value [1][1] after insert:\n";
    std::cout << "[1][1] -> " << m[0][0] << '\n';
    std::cout << "My matrix:\n";
    m.print();
    std::cout << "Get & Set:\n";
    m.set(2, 2, 42);
    std::cout << "My matrix:\n";
    m.print();
    std::cout << "Get [3][3]:\n";
    std::cout << m.get(2, 2) << '\n';
}

Co do logiki, wiele można tu poprawić i usprawnić.

1
komentarz 20 marca 2019 przez eSpring Początkujący (270 p.)
Dziękuje bardzo za wyczerpującą odpowiedź, natomiast chodzi mi najprostszy sposób implementacji tablicy dwuwymiarowej, niekonieczne dynamicznie :)
komentarz 20 marca 2019 przez mokrowski Mędrzec (155,460 p.)

Co to jest jeśli nie semantyka dostępu do tablicy dwu-wymiarowej?

m[0][0]

Inną sprawą jest to że właśnie zaimplementowałem get(...) i set(...).

0 głosów
odpowiedź 20 marca 2019 przez VirtualMember Pasjonat (15,790 p.)
Rozumiem, że chcesz je zaimplementować? Getter poiwinien zwrócić po prostu tę macierz. Za to setter możesz dwojako zaimplementować. Jeden by wstawiał pojedynczą wartość w argumencie do wszystkich pól macierzy, drugi by przyjmować 9 argumentów (bądź jakiś kontener przechowujący 9 argumentów) i ustawiał te wartości do macierzy.
komentarz 20 marca 2019 przez VirtualMember Pasjonat (15,790 p.)
ale tablicę dwuwymiarową już masz     float data[3][3];
komentarz 21 marca 2019 przez eSpring Początkujący (270 p.)

@VirtualMember, ok, zależy mi na tym, aby napisać uniwersalną metodę która przyjmuje indeksy w macierzy, na których ma pracować. 

Podobne pytania

0 głosów
1 odpowiedź 1,410 wizyt
0 głosów
0 odpowiedzi 157 wizyt
0 głosów
0 odpowiedzi 133 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...