Skip to content

Commit 79a08e6

Browse files
🎉 adds struct section(16)
1 parent ed534ce commit 79a08e6

File tree

1 file changed

+166
-1
lines changed

1 file changed

+166
-1
lines changed

docs/tutorial/secao016.md

Lines changed: 166 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,166 @@
1-
# 16 - Big O Notation
1+
# 16 - Structs
2+
3+
Uma struct é um tipo que pode conter zero ou mais variáveis que são alocadas de uma forma ordenada.
4+
5+
O tamanho de uma struct depende do tamanho dos elementos que ela contem.
6+
7+
Normalmente o tamanho será o tamanho do maior elemento em bytes \* o número de elementos.
8+
9+
Usamos structs para agrupar valores ou para representar uma entidade.
10+
11+
O tipo dos elementos que uma struct contem não precisam ser o mesmo.
12+
13+
`struct NOME_DA_STRUCT { };`
14+
15+
```cpp
16+
#include <iostream>
17+
#include <string>
18+
19+
struct Pessoa {
20+
std::string nome;
21+
int idade;
22+
};
23+
24+
int main()
25+
{
26+
/* Variáveis são declaradas da mesma forma que com tipos primitivos */
27+
Pessoa pessoa;
28+
29+
/* Usamos . para acessar coisas que estão dentro de uma struct */
30+
pessoa.nome = "John doe";
31+
pessoa.idade = 30;
32+
33+
std::cout << "A idade de " << pessoa.nome << " e " << pessoa.idade;
34+
}
35+
```
36+
37+
Structs podem conter funções, além de variáveis.
38+
39+
```cpp
40+
#include <iostream>
41+
#include <string>
42+
43+
struct Pessoa {
44+
std::string nome;
45+
int idade;
46+
47+
void apresentar() {
48+
std::cout << "Meu nome e " << nome << " e tenho " << idade << " anos";
49+
}
50+
};
51+
52+
int main()
53+
{
54+
Pessoa pessoa;
55+
pessoa.nome = "John doe";
56+
pessoa.idade = 30;
57+
58+
pessoa.apresentar();
59+
}
60+
```
61+
62+
Structs possuem uma função especial que é chamada quando uma instância daquela struct é criada. Essa função é chamada de construtor, normalmente usada para dar valores para as variáveis que uma struct possui.
63+
64+
O construtor é uma função normal, exceto pelo fato de que não tem um tipo de retorno e só deve ser chamada uma vez de maneira automática.
65+
66+
Quando acessamos uma variável de uma struct, dentro dela mesmo, podemos usar `this` para deixar explicito que a quem tal variável pertence. Isso não é necessário na maioria dos casos, a não ser por preferência ou por um caso onde existe ambiguidade.
67+
68+
```cpp
69+
#include <iostream>
70+
#include <string>
71+
72+
struct Pessoa {
73+
std::string nome;
74+
int idade;
75+
76+
/* O construtor não precisa de um tipo de retorno
77+
*
78+
* Usando this para deixar explicito que estamos copiando o valor das variáveis nome e idade
79+
* passadas nos construtor, para as variáveis nome e idade da instância da struct.
80+
**/
81+
Pessoa(std::string nome, int idade) {
82+
this->nome = nome;
83+
this->idade = idade;
84+
}
85+
86+
void apresentar() {
87+
std::cout << "Meu nome e " << nome << " e tenho " << idade << " anos";
88+
}
89+
};
90+
91+
int main()
92+
{
93+
Pessoa pessoa("John Doe", 30);
94+
95+
pessoa.apresentar();
96+
}
97+
```
98+
99+
Caso nenhum construtor seja declarado, o compilador irá criar um construtor vazio.
100+
101+
Por exemplo:
102+
103+
```cpp
104+
#include <iostream>
105+
#include <string>
106+
107+
struct Pessoa {
108+
std::string nome;
109+
int idade;
110+
111+
/* Criado pelo compilador */
112+
Pessoa() {}
113+
114+
void apresentar() {
115+
std::cout << "Meu nome e " << nome << " e tenho " << idade << " anos";
116+
}
117+
};
118+
119+
int main()
120+
{
121+
Pessoa pessoa;
122+
}
123+
```
124+
125+
Podemos ter mais de um construtor, com cada um deles fazendo uma coisa diferente.
126+
127+
```cpp
128+
#include <iostream>
129+
#include <string>
130+
131+
struct Pessoa {
132+
std::string nome;
133+
int idade;
134+
135+
/* Primeiro */
136+
Pessoa(std::string nome, int idade) {
137+
this->nome = nome;
138+
this->idade = idade;
139+
}
140+
141+
/* Segundo */
142+
Pessoa(std::string nome) {
143+
this->nome = nome;
144+
this->idade = -1 // Vamos considerar -1 como desconhecido
145+
}
146+
147+
/* Terceiro */
148+
Pessoa(int idade) {
149+
this->nome = "desconhecido";
150+
this->idade = idade;
151+
}
152+
153+
void apresentar() {
154+
std::cout << "Meu nome e " << nome << " e tenho " << idade << " anos";
155+
}
156+
};
157+
158+
int main()
159+
{
160+
Pessoa pessoa("John Doe", 30); // Chama o primeiro construtor
161+
162+
Pessoa pessoa("John Doe"); // Chama o segundo construtor
163+
164+
Pessoa pessoa(30); // Chama o teceiro construtor
165+
}
166+
```

0 commit comments

Comments
 (0)