Skrivinställningarna kunde inte uppdateras. Ladda om sidan för att försöka igen.
Tangentbordsövning: Programmering i C++
Reglerna för beräkning av noggrannhet har ändrats. Den här övningen börjar om från början.
Det gick inte att bekräfta att ditt avslutade pass sparades. Försök spara igen utan att skriva texten på nytt.
Tangentbordsövning: Programmering i C++
Tangentbordsträning är betydelsefull för programmering. Du blir effektivare när du använder snabbskrivningstekniker för att skriva kod i programmeringsspråket C++.
Kodning i C++ och tangentbordsträning
C++ är ett av de mest inflytelserika programmeringsspråken inom modern datavetenskap. Det kombinerar minneshantering på låg nivå, ärvd från C, med högnivåabstraktioner som klasser, mallar eng.: templates och avancerade mekanismer som operatoröverladdning eng.: operator overloading. Att skriva kod i C++ kräver ofta större precision än i språk på högre nivå, eftersom dess syntax är fylld av symboler: vinkelparenteser <> för mallar, upplösningsoperatorn ::, semikolon ; för att avsluta satser samt en blandning av klamrar, parenteser och hakparenteser. För utvecklare som tillbringar många timmar varje dag vid tangentbordet är blindskrift i C++ en användbar färdighet. När du känner till tangenternas placering blir det lättare att skriva komplexa malluttryck rätt och koncentrera dig på programmets utformning och prestanda. Snabbt skrivande i C++ minskar tiden som går åt till att mata in och redigera kod, men noggrannhet är viktig även när arbetet går fort.
Konventioner och idiomatisk stil i C++
Precis som Python- och Java-projekt använder C++-projekt stilguider för att förbättra kodens läsbarhet och enhetlighet. Namnkonventionerna varierar mellan projekt: ett kan använda UpperCamelCase för klasser och strukturer, lowerCamelCase för variabler och funktioner samt UPPER_SNAKE_CASE för konstanter, medan ett annat använder små bokstäver med understreck mellan orden. Följ konventionerna i det projekt du arbetar med. C++:s standardbibliotek använder små bokstäver i headernamn som <iostream> och funktionsnamn som std::getline. Blindskrift i C++ gör det naturligt att följa dessa konventioner, och snabbt skrivande underlättar arbetet med långa identifierare som std::chrono::high_resolution_clock eller std::unordered_map.
Headerfiler, namespaces och include
C++ organiserar kod med #include-direktiv och namespaces. Upplösningsoperatorn :: är en av de mest använda symbolerna. Att glömma ett semikolon efter en klassdefinition eller att skriva fel i std orsakar omedelbara kompileringsfel. Blindskrift i C++ gör det enklare att skriva dessa sekvenser korrekt, medan snabbt skrivande minskar friktionen när man hanterar upprepade include-rader och namespace-referenser.
#include <iostream>
#include <vector>
int main() {
std::vector<int> values = {1, 2, 3};
for (int v : values) {
std::cout << v << std::endl;
}
}
Mallar (templates)
Mallar eng.: templates i C++ motsvarar "generics" i andra språk. De gör det möjligt att skriva kod som fungerar med olika datatyper och kombinerar abstraktion med effektivitet. En vanlig utmaning är att skriva vinkelparenteser <> korrekt, särskilt i nästlade strukturer som std::map<std::string, std::vector<int>>. Nybörjare glömmer ofta att stänga en parentes, medan avancerad kod kan använda mallspecialiseringar. Blindskrift gör dessa mönster rutinmässiga, och snabbt skrivande underlättar arbetet med mallintensiv kod.
template<typename T>
class Box {
T value;
public:
Box(T v) : value(v) {}
T get() const { return value; }
};
int main() {
Box<int> b(42);
std::cout << b.get() << std::endl;
}
Operatoröverladdning
Operatoröverladdning eng.: operator overloading gör det möjligt att omdefiniera operatorer som +, << eller [] för användardefinierade klasser. Det är en kraftfull funktion men kräver exakt syntax: korrekt användning av nyckelordet operator, upprätthållande av const-correctness och ibland friend-deklarationer. Definitioner som friend std::ostream& operator<<(std::ostream&, const MyClass&) är känsliga för fel utan stabila tangentvanor. Blindskrift gör dessa mönster mer naturliga, och snabbt skrivande gör det lättare att definiera flera överladdade operatorer.
#include <iostream>
class Point {
int x, y;
public:
Point(int a, int b) : x(a), y(b) {}
Point operator+(const Point& other) const {
return Point(x + other.x, y + other.y);
}
friend std::ostream& operator<<(std::ostream& os, const Point& p) {
return os << "(" << p.x << ", " << p.y << ")";
}
};
int main() {
Point a(1,2), b(3,4);
std::cout << (a + b) << std::endl;
}
Pekare, referenser och minneshantering
En unik egenskap hos C++ är explicit minneshantering. Att skriva pekare *, referenser & och smarta pekare som std::unique_ptr kräver ständig uppmärksamhet. Att glömma en dereferens eller placera const fel kan drastiskt förändra programmets beteende. Blindskrift i C++ gör det möjligt att fokusera på semantiken snarare än på tangenttryckningarna, medan snabbt skrivande minskar ansträngningen vid upprepade deklarationer av pekare och referenser.
#include <memory>
#include <iostream>
int main() {
std::unique_ptr<int> p = std::make_unique<int>(10);
std::cout << *p << std::endl;
}
Klasser, konstruktorer och RAII
C++ populariserade idiomet RAII (Resource Acquisition Is Initialization), där konstruktorer allokerar resurser och destruktorer (~ClassName) frigör dem. Detta kräver exakt skrivning av konstruktorer, destruktorer och initialiseringslistor. Ett saknat kolon eller semikolon leder till kompileringsfel. Övningar i blindskrift hjälper dig att skriva dessa viktiga tecken rätt, och snabbt skrivande gör upprepande initialiseringskod mindre betungande.
#include <fstream>
class File {
std::fstream f;
public:
File(const std::string& name) : f(name) {}
~File() { f.close(); }
};
Const-correctness och funktionssignaturer
C++ främjar const-correctness: icke-statiska medlemsfunktioner som bara läser objektets tillstånd markeras som const. Parametrar kan använda const T& för läsåtkomst via en referens utan att ändra objektet, och constexpr används för konstanter som är kända vid kompilering. Att skriva dessa nyckelord konsekvent kräver övning, men blindskrift hjälper till att skapa en vana. Snabbt skrivande bevarar flödet även när många funktioner skrivs som bara skiljer sig åt i constness.
class User {
std::string name;
public:
User(std::string n) : name(n) {}
const std::string& getName() const { return name; }
};
Standard Template Library (STL)
STL är en av de mest kända egenskaperna i C++. Den erbjuder containers som std::vector, std::map och algoritmer som std::sort. Användningen innebär att man ofta skriver av vinkelparenteser och functors. Nästlade mallar är särskilt felbenägna. Blindskrift gör dessa sekvenser rutinmässiga, och snabbt skrivande gör det enklare att växla mellan olika containers.
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int> nums = {5,2,9,1};
std::sort(nums.begin(), nums.end());
for (int n : nums) std::cout << n << " ";
}
Felhantering med undantag
C++ använder try, catch och throw för undantagshantering. Till skillnad från Javas kontrollerade undantag behöver undantag i C++ inte deklareras eller fångas, men syntaxen kräver fortfarande rätt nyckelord och klamrar. Om ett undantag fångas som värde i stället för via en referens i ett catch-block skapas en kopia som kan förlora den del av objektet som tillhör den härledda klassen; ett saknat semikolon efter throw är ett syntaxfel. Blindskrift gör det enklare att skriva denna struktur korrekt, och snabbt skrivande minskar belastningen när man bygger robust felhantering.
#include <stdexcept>
#include <iostream>
int main() {
try {
throw std::runtime_error("Ett fel inträffade");
} catch (const std::exception& e) {
std::cout << e.what() << std::endl;
}
}
Lambdas och moderna funktioner
Sedan C++11 har lambdauttryck varit en viktig del av språket. Deras capture-listor står inom hakparenteser och kan vara tomma; en pil inleder en valfri, uttryckligen angiven returtyp. Dessa detaljer kräver noggrann inmatning. Sekvenser som [&], [=] eller () -> blir naturliga med övning. Blindskrift automatiserar dessa mönster, och snabbt skrivande gör funktionell kod i loopar och algoritmer mer flytande.
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int> v = {1,2,3,4};
std::for_each(v.begin(), v.end(), [](int x){ std::cout << x*x << " "; });
}
Makron, preprocessor och villkorlig kompilering
Preprocessorn i C++ lägger till ett extra lager: makron, #define och villkorlig kompilering med #ifdef, #ifndef och #endif. Dessa strukturer kräver noggrann och konsekvent tangenthantering. Blindskrift minskar fel i dessa direktiv, och snabbt skrivande hjälper i projekt som använder många makron.
#define DEBUG 1
int main() {
#ifdef DEBUG
std::cout << "Debug-läge" << std::endl;
#endif
}
Samtidiga uppgifter och moderna bibliotek
Moderna C++ innehåller std::thread, std::async och synkroniseringsmekanismer. Trådfunktioner och capture-listor i lambdauttryck måste skrivas noggrant. Ett skrivfel i namnet join kan orsaka ett kompileringsfel, medan ett felaktigt sätt att fånga variabler kan leda till svårupptäckta problem vid körning. Övningar i blindskrift ger träning i att skriva dessa sekvenser rätt. Snabbt skrivande underlättar inmatning och redigering av kod för flera trådar och uppgifter, men synkronisering och objektens livslängd måste fortfarande kontrolleras noggrant.
#include <thread>
#include <iostream>
void task() {
std::cout << "Körs" << std::endl;
}
int main() {
std::thread t(task);
t.join();
}
Sammanfattning
C++ kombinerar lågnivåkontroll från C med abstraktioner från objektorienterad programmering och mallar. Syntaxen är fylld av symboler - vinkelparenteser, kolon, semikolon, stjärnor, referenser och dubbla :: - vilket gör precision avgörande. Namn- och formateringskonventioner beror på projektet, så följ reglerna i den kod du redigerar. Vid övningar i blindskrift i C++ kan du träna på de teckenföljder som används i mallar, överladdade operatorer, lambdauttryck och kod för samtidiga uppgifter. Snabbt skrivande i C++ underlättar inmatning och redigering av headerfiler, namespaces och återkommande strukturer. Båda färdigheterna är användbara vid tangentbordet, men korrekt användning av mallar och säker hantering av resurser och trådar kräver också att du förstår och kontrollerar koden.