Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  9 1271

Kode

#include <iostream>
#include <cstring>
using namespace std;

const int LEN = 20;
class Objekt {
private:
 char txt[LEN];
 char tegn;
 int tall;

public:
 Objekt(char tx[], char te, int ta)
{ strcpy(txt, tx); tegn = te; tall = ta; }
 void funk1() { cout << txt << ' ' << tegn << ' ' << tall; }
 bool funk2(char te, int n1, int n2)
{ return (txt[n1] == te || txt[n2] == te); }
 char funk3() { return (char(int(tegn) + tall)); }
 void funk4(int ta) { tall = ta; }
};

int main() {
Objekt ob1("Arsenal", 'A', 5), ob2("Chelsea", 'H', 3);
cout << ob2.funk2('e', 3, 6) << '\n';     // Utskrift:
cout << ob1.funk2('a', 0, 5) << ' ' << ob2.funk2('E', 2, 5) << '\n'; // Utskrift: 
ob2.funk4(-7); cout << ob1.funk2(ob2.funk3(), 0, 1) << '\n'; // Utskrift: 
return 0;
}
Jeg har fasit men det hjelper lite.

Jeg slite med framgangsmåten i hodet
Trigonoceps occipita
vidarlo's Avatar
Donor
Men kva er det du prøver å oppnå...?
Finner hva som skal kommer ut som utskrift?
cout << ob2.funk2('e', 3, 6) << '\n'; skal komme ut som 0
cout << ob1.funk2('a', 0, 5) << ' ' << ob2.funk2('E', 2, 5) skal komme ut som 1 og 0
ob2.funk4(-7); cout << ob1.funk2(ob2.funk3(), 0, 1) skal komme ut som 1

men det skal løses uten å bruke programmet og trenge hjelp med å se hvordan det løses
Du leser deg opp på hva de forskjellige metodene gjør, ser så på hva funksjonene gjør, og så vet du hva som kommer ut.

E.g. funk2 er en bool funksjon. Den returnerer 0 eller 1 (false/true), avhengig av om noe den sammenlikner er sant eller ikke. Det skal være nok til å finne alle løsningene.
oija, glemte helt ut at det skulle komme ut som 0 eller 1, takk!
Ingen kommer til å beskrive hele koden og alle kall i detalj for deg, det er for omfattende, og mest sannsynlig i stor grad pløye pløyd mark, da vi må anta du gjør dette med eksamen i tankene og kan noe - men vi vet ikke hva. Forklar hva du tror at skjer, linje for linje, kall for kall, og legg litt innsats i det, så skal du ikke se bort ifra at noen hjelper deg.

Men om du ikke gidder mer enn å copy paste kode og si "forklar meg", da gidder ingen.
Sitat av Xasma Vis innlegg
Ingen kommer til å beskrive hele koden og alle kall i detalj for deg, det er for omfattende, og mest sannsynlig i stor grad pløye pløyd mark, da vi må anta du gjør dette med eksamen i tankene og kan noe - men vi vet ikke hva. Forklar hva du tror at skjer, linje for linje, kall for kall, og legg litt innsats i det, så skal du ikke se bort ifra at noen hjelper deg.

Men om du ikke gidder mer enn å copy paste kode og si "forklar meg", da gidder ingen.
Vis hele sitatet...
Jeg vet ikke hvordan du ser på denne koden som omfattende å forklare, den er rimelig enkel. Men samtidig så er ikke koden spesielt pen, og den følger heller ikke stilen til C++, eller retningslinjene. I tillegg så er det endel effektiviserings potensiale. Man kan jo undre seg over hvordan forfatteren har klart å gjøre en så dårlig jobb med 27 linjers lang kode. Jeg ville ha skrevet den slik:

Kode

// header.h

#include <cstdlib>
#include <iostream>
#include <string>

class Object
{
        private:
                std::string txt;
                char tegn;
                int tall;

        public:
                Object(std::string, char, int);
                void funk1() const;
                bool funk2(const char, const int, const int) const;
                char funk3() const;
                void funk4(int);
};

Kode

// source.cpp

#include "header.h"

Object::Object(std::string tx, char te, int ta): txt(tx), tegn(te), tall(ta) {}

void Object::funk1() const
{
        std::cout << this -> txt << ' ' << this -> tegn << ' ' << this -> tall << std::endl;
}

bool Object::funk2(const char te, const int n1, const int n2) const
{
        return(txt[n1] == te || txt[n2] == te);
}

char Object::funk3() const
{
        return(static_cast<char>(static_cast<int>(this -> tegn) + this -> tall));
}

void Object::funk4(int ta)
{
        this -> tall = ta;
}

int main(int argc, char **argv)
{
        Object ob1("Arsenal", 'A', 5);
        Object ob2("Chelsea", 'H', 3);

        std::cout << ob2.funk2('e', 3, 6) << std::endl;
        std::cout << ob1.funk2('a', 0, 5) << ' ' << ob2.funk2('E', 2, 5) << std::endl;

        ob2.funk4(-7);

        std::cout << ob1.funk2(ob2.funk3(), 0, 1) << std::endl;

        return(EXIT_SUCCESS);
}
Eller bedre, bruke getters og setters. Jeg har skrevet getters og setters som functors i koden under.

Kode

// header.h

#include <cstdlib>
#include <iostream>
#include <string>

template <typename T> class Attribute
{
        private:
                T attribute;

        public:
                Attribute();
                Attribute(T);
                T operator()() const;
                void operator()(T);
};

class Object
{
        private:
                Attribute<std::string> txt;
                Attribute<char> tegn;
                Attribute<int> tall;

        public:
                Object(std::string, char, int);
                void funk1() const;
                bool funk2(const char, const int, const int) const;
                char funk3() const;
                void funk4(int);
};

Kode

// source.h

#include "header.h"

template <typename T> Attribute<T>::Attribute() {}

template <typename T> Attribute<T>::Attribute(T attribute)
{
        (*this)(attribute);
}

template <typename T> T Attribute<T>::operator()() const
{
        return(this -> attribute);
}

template <typename T> void Attribute<T>::operator()(T attribute)
{
        this -> attribute = attribute;
}

Object::Object(std::string tx, char te, int ta): 
        txt(Attribute<std::string>(tx)), 
        tegn(Attribute<char>(te)), 
        tall(Attribute<int>(ta)) 
        {}

void Object::funk1() const
{
        std::cout << this -> txt() << ' ' << this -> tegn() << ' ' << this -> tall() << std::endl;
}

bool Object::funk2(const char te, const int n1, const int n2) const
{
        return(txt()[n1] == te || txt()[n2] == te);
}

char Object::funk3() const
{
        return(static_cast<char>(static_cast<int>(this -> tegn()) + this -> tall()));
}

void Object::funk4(int ta)
{
        this -> tall(ta);
}

int main(int argc, char **argv)
{
        Object ob1("Arsenal", 'A', 5);
        Object ob2("Chelsea", 'H', 3);

        std::cout << ob2.funk2('e', 3, 6) << std::endl;
        std::cout << ob1.funk2('a', 0, 5) << ' ' << ob2.funk2('E', 2, 5) << std::endl;

        ob2.funk4(-7);

        std::cout << ob1.funk2(ob2.funk3(), 0, 1) << std::endl;

        return(EXIT_SUCCESS);
}
Sist endret av 0xFF; 7. desember 2017 kl. 19:23.
Sitat av 0xFF Vis innlegg
Jeg vet ikke hvordan du ser på denne koden som omfattende å forklare, den er rimelig enkel.
Vis hele sitatet...
Den er enkel om man forstår ting, det blir fort verre om man må forklare funksjoner, klasser, datatyper og listen fortsetter. Uten å vite nivået, eller hvor problemene ligger er det potensielt en ganske lang forklaring. For de av oss som kan dette er det veldig enkelt, men ingen spør om hjelp til noe de kan, så hvorfor du har et behov for å kalle noe enkelt får du selv svare for. Du har for øvrig ikke svart på noe som hjelper trådstarter heller. Du brukte tiden på å skrive om koden til noe som unektelig er en bedre versjon, men hva dette hjelper tråden forstår jeg ikke, utover at du får flexe litt c++ kunnskaper.
Sist endret av Xasma; 7. desember 2017 kl. 19:28.
Sitat av Xasma Vis innlegg
Den er enkel om man forstår ting, det blir fort verre om man må forklare funksjoner, klasser, datatyper og listen fortsetter. Uten å vite nivået, eller hvor problemene ligger er det potensielt en ganske lang forklaring. For de av oss som kan dette er det veldig enkelt, men ingen spør om hjelp til noe de kan, så hvorfor du har et behov for å kalle noe enkelt får du selv svare for. Du har for øvrig ikke svart på noe som hjelper trådstarter heller. Du brukte tiden på å skrive om koden til noe som unektelig er en bedre versjon, men hva dette hjelper tråden forstår jeg ikke, utover at du får flexe litt c++ kunnskaper.
Vis hele sitatet...
TS hadde problemer med å forstå logikken i koden som han postet, og da er lesbarhet veldig viktig. Jeg hadde selv vansker med å se hva koden gjorde ved første øyekast, siden den var skrevet så kompakt og ikke fulge stillen til C++. Så derfor skrev jeg koden på nytt for TS med større lesbarhet.

Den siste koden med getters og setters er bare for å vise TS hvordan man egentlig skal gjøre det.
Sitat av 0xFF Vis innlegg
TS hadde problemer med å forstå logikken i koden som han postet, og da er lesbarhet veldig viktig. Jeg hadde selv vansker med å se hva koden gjorde ved første øyekast, siden den var skrevet så kompakt og ikke fulge stillen til C++. Så derfor skrev jeg koden på nytt for TS med større lesbarhet.

Den siste koden med getters og setters er bare for å vise TS hvordan man egentlig skal gjøre det.
Vis hele sitatet...
Ut fra måten han spør og hvordan koden ser ut så ser det ut som en eksamens spørsmål fra ene c++ kurset på NTNU som jeg tok.
Husker jeg også måtte øve på sånne kodesnutter for å se hva de printet ut.

Så tipper det han spør etter er hjelp til øvningen på en tidligere eksamensoppgave. Det forklarer hvertfall oppsettet i koden.