c++ tips på saker man kan försöka göra?

Permalänk

c++ tips på saker man kan försöka göra?

När jag började programmera så hade jag en lista som var
1 : hello world
2 : miniräknare ( + )
3 : miniräknare (+ ,- ,* ,/ )
sen gjorde jag ett program som skrev till host filen
Sen följde jag någon c++ directX tutorial (custom framework)
och nu senast så har jag (i lärande syfte bara) testat lagt till lite saker till en keylogger (hittade en sourcecode som funkade,lade till stealth och sen så att den skriver tiden och datum varje gång den startas, men nästan allt är copy paste:at (Har liksom tagit saker från olika koder och lagt ihop) och jag vill göra något själv, som man kan ha använding av..

Mitt mål just nu är att göra en chatt client + server men jag kan inget om socket programmering ännu och det känns som att jag ska göra vanliga program med knappar och sånt innan jag börjar med socketprogrammering?
Är det någon som har något tips på vad jag ska göra? eller någon som har någon sourcecode eller något som man kan kolla på?
tack i förväg

Och btw, ska börja gymnasiet om några dagar och ska gå teknik. Vad läser man för programmeringspråk? c++ och java läste en släkting som gick för några år sedan, samma nu?och vad börjar man med?

Permalänk
Medlem

Vet inte hur man gör för att skriva grafiska program i C++, men i java brukar en klassiker vara att använda sig av swing och skriva ihop en liten lätt notepad. Det kanske kan vara en idé?

Visa signatur

Stationär: Fractal Design Meshify 2 Compact, Ryzen 7 5700x, MSI MAG B550 Tomahawk, Kingston HyperX Fury 32GB 3600Mhz CL18, Sapphire Radeon RX 5700 Pulse, Kingston KC3000 1TB, Kingston A2000 1TB, Seasonic Focus GX 650W, Noctua NH-U14S

NAS: Fractal Design Define R5, Ryzen 3 1200AF, Asus Prime B450M-A, 32GB ECC DDR4 @ 2133Mhz, 5x WD Red 4TB (Raidz2), WD Red 2TB (stripe), TrueNAS 12.0

Permalänk

Har funderat på att försöka göra såhär nu,
1 : notepad liknande program
2 : paint, eller något där man har en penna och kan skriva på en bild iaf, (kanske försöka sig på Steganography >:D)
Tips på vad man kan göra mer uppskattas, och vad man kan börja med när man ska börja programmera med knappar, någon som har nån sourcecode till nått enkelt program som man få kolla på?

Permalänk
Hedersmedlem
Skrivet av Dayz-Nooben:

Tips på vad man kan göra mer uppskattas, och vad man kan börja med när man ska börja programmera med knappar, någon som har nån sourcecode till nått enkelt program som man få kolla på?

Qt är ett trevligt ramverk för att skriva gui:n, men det innehåller också många hjälpklasser för socket-kommunikation och liknande.

Permalänk
Medlem

Java och C++ är de jag hört folk har använt i programmeringskurser på gymnasiet, men koncepten du ska lära dig där är så pass grundläggande att du skulle kunna skriva det i vilket språk som helst. Kör ett språk du känner dig bekväm med så kommer du vara förberedd oavsett.

Permalänk
Skrivet av Suedede:

Java och C++ är de jag hört folk har använt i programmeringskurser på gymnasiet, men koncepten du ska lära dig där är så pass grundläggande att du skulle kunna skriva det i vilket språk som helst. Kör ett språk du känner dig bekväm med så kommer du vara förberedd oavsett.

Jag gillar c++ och gillar inte java

Permalänk
Skrivet av Elgot:

Qt är ett trevligt ramverk för att skriva gui:n, men det innehåller också många hjälpklasser för socket-kommunikation och liknande.

ska kolla på det

Permalänk

http://projecteuler.net/problems Här är en del riktigt bra övningar för att färska till ditt logiska tänkande inför riktiga utmaningar.

http://www.cplusplus.com/forum/beginner/75558/ Detta är en rätt bra tråd med många vettiga övningar. Den med circeln var riktigt rolig faktiskt när jag gjorde den för ett tag sen.

Lär dig STL containers (särskilt Vector och Map), gör en linked list, binary tree.

När du känner dig fräsch på ovanstående punkter kan du försöka göra ett spel där man bara ska plocka upp pinnar på marken tex. Det var mitt första spel och det kändes som ett bra första spel att göra, lagom svårt.

Jag skulle föredra att använda SDL för att göra enkla 2D spel. Det är så enkelt så det inte är sant. Sen när du känner dig säker på SDL går du över till SDL/OpenGL. Då kan du göra 3D grafik utan att fokusera på att lära dig hur man sätter upp ett OpenGL fönster med windows API, det är dödstråkigt enligt mig.

Finns många trådar om det här för övrigt.

Visa signatur

| i5 2500k | h100 | Evga 580 | Fractal Design arc | Asrock P67 Fatal1ty | Hx1050w | 24" BenQ | 16GB Vengeance Ram | Razer DeathAdder | Razer Carcharias | Razer Arctosa |

Permalänk
Medlem

Börja läsa på teorin om objekt orientering. Gör grundläggande program i console och avancera vidare mot gui. Vad du gör är inte det intressanta utan att du behärskar objekt orienteringen bra. Men tips på program/spel med oop skulle väl väl kunna vara register av olika slag ex, ett kundregister. Eller ett spel som har stöd för flera spelare ex, bild memory med olika typer av spelare (hur pass bra dem är).

Permalänk
Medlem

Om du vill börja utveckla grafiska användargränssnitt i C++, så beror det på vilket operativsystem du använder.

Kör du ex. MS Windows så är det Win32, MFC, CLR och WTL som du får arbeta mot (finns ett nytt för Win 8, men för tidigare + Win 8 går Win32).
För Linux, ex. Ubuntu, så finns det bla. QT, wxWidgets och GTK+, om jag kommer ihåg rätt.

Om du kör Windows, så skulle jag rekomendera att du skulle skaffa Visual C++ Express, brukar finnas färdiga exempel för grafiska användargränssnitt, så du slipper sitta och koda allt från grunden, och kan snabbt komma igång med ditt lärande innom gui:n.

Permalänk
Datavetare

Har gjort en hel del socket-programmering i C. Första frågan är: är målet att göra socket-programmering i C/C++ eller är målet att lära dig lite om nätverksprogrammering i största allmänhet genom att t.ex. göra en chat-server/klient?

Om det är det senare så är ett tips att titta på Go som är otroligt enkelt att göra nätverksprogrammering i, mer specifikt är det klart enklare att göra väldigt skalbara nätverksprogram i Go än vad det är i C++, Java eller C#.

Men om du verkligen vill programmera i C/C++ så kommer några exempel.

Öppna en UDP/TCP socket, automatiskt hantera fallet IPv4/IPv6

/* * host - address or name of the remote node, ex "127.0.0.1", "::1" or "localhost" * port - name or number of the service to connect to, ex "80", "www", "html" * sock_type - SOCK_DGRAM to use UDP, SOCK_STREAM to use TCP */ int open_socket(const char *host, const char *port, int sock_type) { struct addrinfo *r, hints; int ai_err; int sock; memset(&hints, 0, sizeof(hints)); hints.ai_socktype = sock_type; ai_err = getaddrinfo(host, port, &hints, &r); if (ai_err != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ai_err)); exit(EXIT_FAILURE); } sock = socket(r->ai_family, r->ai_socktype, r->ai_protocol); if (sock < 0) { perror("socket"); exit(EXIT_FAILURE); } if (connect(sock, r->ai_addr, r->ai_addrlen) < 0) { perror("connect"); exit(EXIT_FAILURE); } freeaddrinfo(r); return sock; }

Bara som referens, här är samma kod i Go

func open_sock(host string, port string, sock_type string) Conn { if conn, err := net.Dial(sock_type, net.JoinHostPort(host, port)); err != nil { panic(err) } return conn }

Och här är ett komplett exempel på både en "server" och "klient" i samma program, går att bygga direkt i CygWin (på Windows), Linux och OSX

#include <netdb.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/types.h> #include <stdio.h> void panic(const char *msg) { perror(msg); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { int server_sock; int listen_sock; int client_sock; char msg[] = "Hello world"; char rmsg[sizeof msg]; struct addrinfo *r; struct addrinfo hints; memset(&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_STREAM; getaddrinfo("localhost", "12345", &hints, &r); listen_sock = socket(r->ai_family, r->ai_socktype, r->ai_protocol); if (listen_sock < 0) panic("socket"); /* Assign the socket to port "12345" and address "localhost" */ if (bind(listen_sock, r->ai_addr, r->ai_addrlen) < 0) panic("bind"); /* Start listening for incoming requests */ if (listen(listen_sock, 0) < 0) panic("listen"); client_sock = socket(r->ai_family, r->ai_socktype, r->ai_protocol); if (client_sock < 0) panic("socket"); /* Connect to the "server", i.e. "localhost" at port "12345" */ if (connect(client_sock, r->ai_addr, r->ai_addrlen) < 0) panic("connect"); freeaddrinfo(r); /* Accept connection */ server_sock = accept(listen_sock, NULL, NULL); if (server_sock < 0) panic("accept"); /* Does not want to accept any more connections */ close(listen_sock); if (send(server_sock, msg, sizeof msg, 0) < 0) panic("send"); if (recv(client_sock, &rmsg, sizeof rmsg, 0) < 0) panic("recv"); printf("Server says: %s\n", rmsg); close(server_sock); close(client_sock); }

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Målet är att lära mig c++ i allmänhet, jag ska gå teknik på gymnasiet och ska lära mig lite programmering men vill lära mig mer än vad jag kommer göra där
Och mitt första mål är att göra en RAT (en laglig), men jag vill ialafall lära mig c++ "flytande" ^^
Tänkte ju iaf utbilda mig till programmerare så då får man väll se senare sen vad det blir för programmering
men c++ har jag tänkt att lära mig först

Permalänk
Datavetare
Skrivet av Dayz-Nooben:

Målet är att lära mig c++ i allmänhet, jag ska gå teknik på gymnasiet och ska lära mig lite programmering men vill lära mig mer än vad jag kommer göra där
Och mitt första mål är att göra en RAT (en laglig), men jag vill ialafall lära mig c++ "flytande" ^^
Tänkte ju iaf utbilda mig till programmerare så då får man väll se senare sen vad det blir för programmering
men c++ har jag tänkt att lära mig först

Aha. Rent formellt så var mina exempel ovan C och inte C++, men de fungerar ju i C++ också och vill man kan man ju byta ut printf() mot cout

Ett mer C++:igt gränssnitt för socketprogrammering hittar man annars i Boost asio, men många tycker det är en ganska hög tröskeln innan man kommer in i tanken bakom detta API.

Qt har ju också nämns. Qt har ett relativt tunt lager ovanpå BSD socket API:et (det jag använde ovan), det viktigaste tillägget i Qt är att det knyter in sockets i det Qt kallar signals & slots vilket gör det enkelt och effektivt att skriva GUI applikationer som använder sockets och köra alltihop i en och samma tråd utan att saker blockar varandra. Varken GUI eller socket-anrop tenderar att vara speciellt CPU-intensiva så det är ofta bara att komplicera livet för sig själv att blanda in multitrådning i det läget.

Qt är förövrigt väldigt trevligt att använda för GUI-programmering också, är definitivt ingen expert på det området men har ändå testat på en del GUI-ramverk. Qt är definitivt det bästa jag använt än så länge. Rekommenderar att testa utvecklingsmiljön QtCreator då den gör det väldigt enkelt att designa sitt GUI och komma igång med Qt rent allmänt. QtCreator är gratis.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Vet inte om jag är för trött eller bara dum i huvudet eller nått, men varför är build knappen gråad i Qt creator o.o
även start debugging är det (Laddade ner nån sample kod från deras sida)

Permalänk
Hedersmedlem
Skrivet av Dayz-Nooben:

Vet inte om jag är för trött eller bara dum i huvudet eller nått, men varför är build knappen gråad i Qt creator o.o
även start debugging är det (Laddade ner nån sample kod från deras sida)

Vad händer om du startar ett nytt projekt (förslagsvis av typen "Qt Gui Application")?

Permalänk

då är dom inte gråade, hmm

Permalänk

kollade runt lite nu och vet hur man drar ut knapparna och sånt, men hur exakt "bindar" man knapparna till ett "command", tex ifall jag vill ha en knapp som tex öppnar ett annat program , skulle du kunna skriva en liten sample kod som öppnar paint om man klickar på en knapp som heter paint, är ju ny till sånthär

Permalänk
Datavetare
Skrivet av Dayz-Nooben:

kollade runt lite nu och vet hur man drar ut knapparna och sånt, men hur exakt "bindar" man knapparna till ett "command", tex ifall jag vill ha en knapp som tex öppnar ett annat program , skulle du kunna skriva en liten sample kod som öppnar paint om man klickar på en knapp som heter paint, är ju ny till sånthär

Detta är en video i en hel serie om Qt programmering med QtCreator. Denna serie är RIKTIGT bra och enkelt att följa, så ett tips är att titta på de videos i denna serie som rör det du vill göra.

Här är länken till hela serien: http://www.youtube.com/playlist?list=PL2D1942A4688E9D63&feature=plcp

Edit: du vill nog titta på denna video också för allt lära dig implementera egna signal/slots så du får skriva den kod som ska köras när ett event ska skapas (signal) eller vad som ska hända när det konsumeras (slot).

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

awesome text

Tack som fan för tutorialsen
förstår redan nu varför du skrev RIKTIGT istället för riktigt, och jag är bara på del 7!
ska kolla hela dagen imorgon tror jag >:D