Professional Documents
Culture Documents
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Exemplo 1
exemplo01.cpp
1.1 #include
#include instrui o pr-processador a incluir no programa o contedo do arquivo de cabealho (biblioteca).
1.3 namespace
O namespace utilizado para evitar conitos de atribuies de nomes.
1
2
3
4
5
6
7
8
9
namespace Example
{
int integer = 5;
}
int main ()
{
int integer = Example :: integer ;
}
1.4 std::cout
O objeto de uxo de sada padro, std::cout, realiza a sada de dados na tela. A notao std::cout especica
que o nome cout, pertence ao namespace std.
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Exemplo 2
exemplo02.cpp
2.1 std::cin
O objeto de uxo de entrada padro, std::cin, realiza a entrada de dados a partir do teclado. A notao
std::cin especica que o nome cin, pertence ao namespace std.
2.3 std::endl
O manipulador de uxo std::endl gera sada de um caractere de nova linha e, depois, esvazia o buer de
sada. O nome endl uma abreviao de "end line"e pertence ao namespace std.
2
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Exemplo 3
exemplo03.cpp
class Example
{
public :
void myFunction ()
{
// corpo da funo membro
}
};
3.4 std::getline
A chamada da funo getline l caracteres (incluindo espao em branco) do objeto de uxo de entrada
padro cin at o caractere nova linha ser encontrado.
4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Exemplo 4
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
{
setCourseName ( name ) ;
} // fim do construtor GradeBook
// funo que configura o nome do curso
void setCourseName ( string name )
{
courseName = name ; // armazena o nome do curso
} // fim da funo setCurseName
// funo que obtm o nome do curso
string getCourseName ()
{
return courseName ; // retorna o nome do curso
} // fim da funo getCourseName
// funo que exibe uma mensagem de boas vindas ao usurio do GradeBook
void displayMessage ()
{
cout << " Bem vindo ao Livro de Notas de \ n " << getCourseName () << " ! " << endl ;
} // fim da funo displayMessage
private :
string courseName ; // nome do curso
}; // fim da classe GradeBook
// a funo main inicia a execuo do programa
int main ()
{
// cria dois objetos GradeBook
GradeBook gradeBook1 ( " Informatica Industrial " ) ;
GradeBook gradeBook2 ( " Automacao e Controle " ) ;
// exibe valor inicial de courseName para cada GradeBook
cout << " gradeBook1 criado para o curso : " << gradeBook1 . getCourseName ()
<< " \ ngradeBook2 criado para o curso : " << gradeBook2 . getCourseName ()
<< endl ;
system ( " pause " ) ;
return 0; // indica terminao bem - sucedida
} // fim de main
exemplo04.cpp
4.1 Construtor
Cada classe declarada pode fornecer um construtor que pode ser utilizado para inicializar um objeto de uma
classe quando o objeto criado. Um construtor uma funo-membro especial que deve ser denida com o
mesmo nome da classe. Os construtores no podem retornar valores, ento eles no podem especicar um
tipo de retorno.
5
1
2
3
4
5
6
7
8
9
10
Exemplo 5
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Exemplo05/GradeBook.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Exemplo05/exemplo05.cpp
6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//
//
//
//
Exemplo 6
Exemplo 06: GradeBook . h
Definio da classe GradeBook . Esse arquivo apresenta a interface pblica de
GradeBook sem revelar as implementaes de funes - membro de GradeBook
que so definidas em GradeBook . cpp
# include < string > // a classe GradeBook utiliza a classe de string padro C ++
using std :: string ;
// definio da classe GradeBook
class GradeBook
{
public :
GradeBook ( string ) ; // construtor
void setCourseName ( string ) ; // funo para configurar o nome do curso
string getCourseName () ; // funo para obter o nome do curso
void displayMessage () ; // exibe uma mensagem de boas - vindas
private :
string courseName ; // nome do curso
}; // fim da classe GradeBook
Exemplo06/GradeBook.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Exemplo06/GradeBook.cpp
1 // Exemplo 06: exemplo06 . cpp
2 // Demonstrando a classe GradeBook depois de separar
3 // sua interface de sua implementao
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Exemplo06/exemplo06.cpp
7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Exemplo 7
Exemplo07/GradeBook.h
1 // Exemplo 07: GradeBook . cpp
2 // Definies de funo - membro de GradeBook . Esse arquivo contm
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
std :: cout ;
std :: cin ;
std :: endl ;
std :: fixed ;
71
// exibe o total e a mdia
72
cout << " \ nO total de todas as " << gradeCounter << " notas inseridas e "
73
<< total << endl ;
74
cout << " A media da classe e " << setprecision (2) << fixed << average
75
<< endl ;
76
} // fim do if
77
else
78
cout << " Nenhuma nota foi inserida " << endl ;
79 } // fim da funo determineClassAverage
Exemplo07/GradeBook.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Exemplo07/exemplo07.cpp
7.1 std::setprecision
std::setprecision dene o nmero de dgitos de preciso.
7.2 std::fixed
std::fixed utilizada para forar um nmero de ponto utuante a exibir um nmero especco de dgitos.
7.3 static_cast<tipo>
Utilizado para converter entre tipos numricos fundamentais.
8
1
2
3
4
5
6
7
8
9
10
11
12
13
Exemplo 8
10
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
=
=
=
=
=
=
0;
0;
0;
0;
0;
0;
//
//
//
//
//
//
contagem
contagem
contagem
contagem
contagem
contagem
de
de
de
de
de
de
1s
2s
3s
4s
5s
6s
lanados
lanados
lanados
lanados
lanados
lanados
Exemplo08/exemplo08.cpp
11
8.1 std::setw
std::setw especica que a prxima sada de valor deve aparecer em uma largura denida entre parnteses.
8.2 std::rand
A funo rand gera um inteiro sem sinal entre 0 e RAND_MAX.
8.3 std::srand
A funo srand aceita um argumento do tipo inteiro e semeia a funo srand para produzir uma sequncia
diferente de nmeros aleatrios.
8.4 std::time
A funo time (com o argumento 0) retorna a hora atual como o nmero de segundos desde 1 de janeiro de
1970 meia noite.
9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Exemplo 9
Exemplo09/exemplo09.cpp
10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Exemplo 10
- 23
0 - 59
0 - 59
Time
# endif
Exemplo10/Time.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
13
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Exemplo10/Time.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
14
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 }
Exemplo10/exemplo10.cpp
10.1 std::fill
A funo std::fill especica o caractere de preenchimento a ser utilizado.
15
11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Exemplo 11
Exemplo11/Increment.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
16
28
cout << " count = " << count << " , increment = " << increment << endl ;
29 } // fim da funo print
Exemplo11/Increment.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Exemplo11/exemplo11.cpp
12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Exemplo 12
17
16
string getLastName () const ; // retorna sobrenome
17
void printSalary () const ; // imprime salrio
18
static int getCount () ; // retorna nmero de objetos instanciados
19 private :
20
string firstName ;
21
string lastName ;
22
static int count ;
23 };
24
25 # endif
Exemplo12/Employee.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Exemplo12/Employee.cpp
1 // Exemplo 12: exemplo12 . cpp
2 // Programa para testar a classe Employee
18
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
employee1 . printSalary () ;
employee1 . printSalary () ;
system ( " pause " ) ;
return 0;
}
Exemplo12/exemplo12.cpp
de cdigo (.cpp).
Para acessar um membro de classe public static quando no existe nenhum objeto da classe, simplesmente prexe o nome da classe e o operador (::) com o nome do membro de dados. Para acessar um membro
da classe private static quando no houver nenhum objeto da classe, fornea uma funo membro public
static e chame a funo prexando seu nome com o nome da classe e o operador (::).
13
Exemplo 13
19
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Exemplo13/exemplo13.cpp
13.1 Arrays
Um array um grupo consecutivo de posies na memria em que todas elas so do mesmo tipo. Para
referir-se a uma particular localizao ou elemento no array, especica-se o nome do array e o nmero de
posio do elemento particular do array.
Se o tamanho do array for omitido de uma declarao com uma lista inicializadora, o compilador determina
o nmero de elementos no array contendo o nmero de elementos na lista inicializadora.
1 int n [] = {1 , 2 , 3 , 4 , 5};
14
1
2
3
4
5
6
7
8
9
10
Exemplo 14
20
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Exemplo14/exemplo14.cpp
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Exemplo 15
21
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Exemplo15/exemplo15.cpp
Para passar um argumento array a uma funo, especique o nome do array sem colchetes.
1 int array [10];
2
3 modifyArray ( array , 10) ;
16
1
2
3
4
5
6
7
8
9
Exemplo 16
22
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
int main ()
{
int array1 [ 2 ][ 3 ] = { { 1 , 2 , 3 } , { 4 , 5 , 6 } };
int array2 [ 2 ][ 3 ] = { 1 , 2 , 3 , 4 , 5 };
int array3 [ 2 ][ 3 ] = { { 1 , 2 } , { 4 } };
cout << " Valores por linha no array1 sao : " << endl ;
printArray ( array1 ) ;
cout << " \ nValores por linha no array2 sao : " << endl ;
printArray ( array2 ) ;
cout << " \ nValores por linha no array3 sao : " << endl ;
printArray ( array3 ) ;
getchar () ; // pausa o programa
return 0; // indica terminao bem - sucedida
} // fim de main
// gera sada do array com duas linhas e trs colunas
void printArray ( const int a [][ 3 ] )
{
// faz um loop pelas linhas do array
for ( int i = 0; i < 2; i ++ )
{
// faz um loop pelas colunas da linha atual
for ( int j = 0; j < 3; j ++ )
cout << a [ i ][ j ] << ;
cout << endl ; // inicia nova linha de sada
} // fim do for externo
} // fim da funo printArray
Exemplo16/exemplo16.cpp
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Exemplo 17
23
27
string courseName ; // nome do curso para esse livro de notas
28
int grades [ students ]; // array de notas de aluno
29 }; // fim da classe GradeBook
Exemplo17/GradeBook.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
24
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
Exemplo17/GradeBook.cpp
1
2
3
4
5
6
7
8
9
10
25
11
{ 87 , 68 , 94 , 100 , 83 , 78 , 85 , 91 , 76 , 87 };
12
13
GradeBook myGradeBook (
14
" Informatica Industrial " , gradesArray ) ;
15
myGradeBook . displayMessage () ;
16
myGradeBook . processGrades () ;
17
18
getchar () ;
19
20
return 0;
21
22 } // fim de main
Exemplo17/exemplo17.cpp
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Exemplo 18
Exemplo18/exemplo18.cpp
26
Quando * aparece em uma declarao, ele no um operador, em vez disso, indica que a varivel sendo
declarada um ponteiro.
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Exemplo 19
27
40
* nPtr = * nPtr * * nPtr * * nPtr ; // eleva * nPtr ao cubo
41 } // fim da funo cubeByReference
Exemplo19/exemplo19.cpp
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Exemplo 20
Exemplo20/exemplo20.cpp
28
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Exemplo 21
Exemplo21/exemplo21.cpp
22
Exemplo 22
29
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Exemplo22/exemplo22.cpp
23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Exemplo 23
Exemplo23/exemplo23.cpp
30
24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Exemplo 24
31
55
56
57
58
59
60
61
62
63
64
65
66
Exemplo24/exemplo24.cpp
25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Exemplo 25
Exemplo25/exemplo25.cpp
26
Exemplo 26
32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Exemplo26/DeckOfCards.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
33
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Exemplo26/DeckOfCards.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Exemplo26/exemplo26.cpp
27
1
2
3
4
5
Exemplo 27
34
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Exemplo27/CommissionEmployee.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
35
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// configura o sobrenome
void CommissionEmployee :: setLastName ( const string last )
{
lastName = last ; // deve validar
} // fim da funo setLastName
// retorna o sobrenome
string CommissionEmployee :: getLastName () const
{
return lastName ;
} // fim da funo getLastName
// configura o SSN
void CommissionEmployee :: setSocialSecurityNumber ( const string ssn )
{
socialSecurityNumber = ssn ; // deve validar
} // fim da funo setSocialSecurityNumber
// retorna o SSN
string CommissionEmployee :: getSocialSecurityNumber () const
{
return socialSecurityNumber ;
} // fim da funo getSocialSecurityNumber
// configura a quantidade de vendas brutas
void CommissionEmployee :: setGrossSales ( double sales )
{
grossSales = ( sales < 0.0 ) ? 0.0 : sales ;
} // fim da funo setGrossSales
// retorna a quantidade de vendas brutas
double CommissionEmployee :: getGrossSales () const
{
return grossSales ;
} // fim da funo getGrossSales
// configura a taxa de comisso
void CommissionEmployee :: setCommissionRate ( double rate )
{
commissionRate = ( rate > 0.0 && rate < 1.0 ) ? rate : 0.0;
} // fim da funo setCommissionRate
// retorna a taxa de comisso
double CommissionEmployee :: getCommissionRate () const
{
return commissionRate ;
} // fim da funo getCommissionRate
// calcula os rendimentos
double CommissionEmployee :: earnings () const
{
return commissionRate * grossSales ;
} // fim da funo earnings
// imprime o objeto CommissionEmployee
void CommissionEmployee :: print () const
{
cout << " Empregado comissionado : " << firstName << << lastName
<< " \ nNumero do seguro social : " << socialSecurityNumber
<< " \ nQuantidade de vendas : " << grossSales
<< " \ nTaxa de comissao : " << commissionRate ;
} // fim da funo print
Exemplo27/CommissionEmployee.cpp
1 // Exemplo 27: BasePlusCommissionEmployee . h
2 // Classe BasePlusCommissionEmployee derivada da classe
36
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// CommissionEmployee .
# ifndef BASEPLUS_H
# define BASEPLUS_H
# include < string > // classe string padro C ++
using std :: string ;
# include " CommissionEmployee . h " // Declarao da classe CommissionEmployee
class BasePlusCommissionEmployee : public CommissionEmployee
{
public :
BasePlusCommissionEmployee ( const string , const string ,
const string , double = 0.0 , double = 0.0 , double = 0.0 ) ;
void setBaseSalary ( double ) ; // configura o salrio - base
double getBaseSalary () const ; // retorna o salrio - base
double earnings () const ; // calcula os rendimentos
void print () const ; // imprime o objeto BasePlusCommissionEmployee
private :
double baseSalary ; // salrio - base
}; // fim da classe BasePlusCommissionEmployee
# endif
Exemplo27/BasePlusCommissionEmployee.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
37
41
// pode acessar dados protected da classe bsica
42
cout << " Empregado comissionado com salario base : " << firstName <<
43
<< lastName << " \ nNumero do seguro social : " << socialSecurityNumber
44
<< " \ nQuantidade de vendas : " << grossSales
45
<< " \ nTaxa de comissao : " << commissionRate
46
<< " \ nSalario base : " << baseSalary ;
47 } // fim da funo print
Exemplo27/BasePlusCommissionEmployee.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Exemplo27/exemplo27.cpp
27.1 Herana
A herana uma forma de reutilizao de software em que o programador cria uma classe que absorve dados
e comportamentos de uma classe existente e os aprimora com novas capacidades. Ao criar uma classe, em vez
de escrever membros de dados e funes membro completamente novos, o programador pode designar que a
nova classe deve herdar membros de uma classe existente. Essa classe existente chamada classe bsica e a
nova classe referida como classe derivada.
38
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Exemplo 28
Exemplo28/CommissionEmployee.h
1
2
3
4
5
39
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
40
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
{
return commissionRate ;
} // fim da funo getCommissionRate
// calcula os rendimentos
double CommissionEmployee :: earnings () const
{
return getCommissionRate () * getGrossSales () ;
} // fim da funo earnings
// imprime o objeto CommissionEmployee
void CommissionEmployee :: print () const
{
cout << " Empregado comissionado : "
<< getFirstName () << << getLastName ()
<< " \ nNumero do seguro social : " << getSocialSecurityNumber ()
<< " \ nQuantidade de vendas : " << getGrossSales ()
<< " \ nTaxa de comissao : " << getCommissionRate () ;
} // fim da funo print
Exemplo28/CommissionEmployee.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Exemplo28/BasePlusCommissionEmployee.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
41
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Exemplo28/BasePlusCommissionEmployee.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
42
35
cout << " \ nInformacoes atualizadas do empregado utilizando a funcao print : \ n "
36
<< endl ;
37
employee . print () ; // exibe as novas informaes do empregado
38
39
// exibe os rendimentos do empregado
40
cout << " \ n \ nSalario do empregado : $ " << employee . earnings () << endl ;
41
42
getchar () ; // pausa o programa
43
44
return 0;
45 } // fim de main
Exemplo28/exemplo28.cpp
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Exemplo 29
Exemplo29/CommissionEmployee.h
43
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
44
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
{
commissionRate = ( rate > 0.0 && rate < 1.0 ) ? rate : 0.0;
} // fim da funo setCommissionRate
// retorna a taxa de comisso
double CommissionEmployee :: getCommissionRate () const
{
return commissionRate ;
} // fim da funo getCommissionRate
// calcula os rendimentos
double CommissionEmployee :: earnings () const
{
return getCommissionRate () * getGrossSales () ;
} // fim da funo earnings
// imprime o objeto CommissionEmployee
void CommissionEmployee :: print () const
{
cout << " empregado comissionado : "
<< getFirstName () << << getLastName ()
<< " \ nnumero do seguro social : " << getSocialSecurityNumber ()
<< " \ nquantidade de vendas : " << getGrossSales ()
<< " \ ntaxa de comissao : " << getCommissionRate () ;
} // fim da funo print
Exemplo29/CommissionEmployee.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Exemplo29/BasePlusCommissionEmployee.h
1
2
3
4
5
6
7
8
9
45
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
BasePlusCommissionEmployee :: BasePlusCommissionEmployee (
const string first , const string last , const string ssn ,
double sales , double rate , double salary )
// chama explicitamente o construtor da classe bsica
: CommissionEmployee ( first , last , ssn , sales , rate )
{
setBaseSalary ( salary ) ; // valida e armazena o salrio - base
} // fim do construtor BasePlusCommissionEmployee
// configura o salrio - base
void BasePlusCommissionEmployee :: setBaseSalary ( double salary )
{
baseSalary = ( salary < 0.0 ) ? 0.0 : salary ;
} // fim da funo setBaseSalary
// retorna o salrio - base
double BasePlusCommissionEmployee :: getBaseSalary () const
{
return baseSalary ;
} // fim da funo getBaseSalary
// calcula os rendimentos
double BasePlusCommissionEmployee :: earnings () const
{
return getBaseSalary () + CommissionEmployee :: earnings () ;
} // fim da funo earnings
// imprime o objeto BasePlusCommissionEmployee
void BasePlusCommissionEmployee :: print () const
{
cout << " empregado comissionado com salario base \ n " ;
// invoca a funo print de CommissionEmployee
CommissionEmployee :: print () ;
cout << " \ nsalario base : " << getBaseSalary () ;
} // fim da funo print
Exemplo29/BasePlusCommissionEmployee.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
46
29
// cria ponteiro de classe derivada
30
BasePlusCommissionEmployee * basePlusCommissionEmployeePtr = 0;
31
32
// configura a formatao de sada de ponto flutuante
33
cout << fixed << setprecision ( 2 ) ;
34
35
// gera sada dos objetos commissionEmployee e basePlusCommissionEmployee
36
cout << " Imprime objetos da classe basica e da classe derivada :\ n \ n " ;
37
commissionEmployee . print () ; // invoca print da classe bsica
38
cout << " \ n \ n " ;
39
basePlusCommissionEmployee . print () ; // invoca print da classe derivada
40
41
// aponta o ponteiro de classe bsica para o objeto de classe bsica e imprime
42
commissionEmployeePtr = & commissionEmployee ; // perfeitamente natural
43
cout << " \ n \ n \ nInvocando a funcao print da classe basica com ponteiro da classe "
44
<< " \ nbasica apontando para um objeto da classe basica :\ n \ n " ;
45
commissionEmployeePtr - > print () ; // invoca print da classe bsica
46
47
// aponta o ponteiro de classe derivada p / o objeto de classe derivada e imprime
48
basePlusCommissionEmployeePtr = & basePlusCommissionEmployee ; // natural
49
cout << " \ n \ n \ nInvocando a funcao print da classe derivada com ponteiro da classe "
50
<< " \ nderivada apontando para um objeto da classe derivada :\ n \ n " ;
51
basePlusCommissionEmployeePtr - > print () ; // invoca print da classe derivada
52
53
// aponta ponteiro de classe bsica para o objeto de classe derivada e imprime
54
commissionEmployeePtr = & basePlusCommissionEmployee ;
55
cout << " \ n \ n \ nInvocando a funcao print da classe basica com ponteiro da classe "
56
<< " \ nbasica apontando para um objeto da classe derivada :\ n \ n " ;
57
commissionEmployeePtr - > print () ; // invoca print da classe bsica
58
cout << endl ;
59
getchar () ; // pausa o programa
60
return 0;
61 } // fim de main
Exemplo29/exemplo29.cpp
29.1 Polimorsmo
O polimorsmo ocorre quando um programa invoca uma funo virtual por meio de um ponteiro da classe
bsica. O C++ escolhe dinamicamente a funo correta para a classe a partir da qual o objeto foi instanciado.
30
1
2
3
4
5
6
7
8
9
Exemplo 30
47
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
public :
CommissionEmployee ( const string , const string , const string ,
double = 0.0 , double = 0.0 ) ;
void setFirstName ( const string ) ; // configura o nome
string getFirstName () const ; // retorna o nome
void setLastName ( const string ) ; // configura o sobrenome
string getLastName () const ; // retorna o sobrenome
void setSocialSecurityNumber ( const string ) ; // configura o SSN
string getSocialSecurityNumber () const ; // retorna o SSN
void setGrossSales ( double ) ; // configura a quantidade de vendas brutas
double getGrossSales () const ; // retorna a quantidade de vendas brutas
void setCommissionRate ( double ) ; // configura a taxa de comisso
double getCommissionRate () const ; // retorna a taxa de comisso
virtual double earnings () const ; // calcula os rendimentos
virtual void print () const ; // imprime o objeto CommissionEmployee
private :
string firstName ;
string lastName ;
string socialSecurityNumber ;
double grossSales ; // vendas brutas semanais
double commissionRate ; // porcentagem da comisso
}; // fim da classe CommissionEmployee
# endif
Exemplo30/CommissionEmployee.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
48
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// retorna o sobrenome
string CommissionEmployee :: getLastName () const
{
return lastName ;
} // fim da funo getLastName
// configura o SSN
void CommissionEmployee :: setSocialSecurityNumber ( const string ssn )
{
socialSecurityNumber = ssn ; // deve validar
} // fim da funo setSocialSecurityNumber
// retorna o SSN
string CommissionEmployee :: getSocialSecurityNumber () const
{
return socialSecurityNumber ;
} // fim da funo getSocialSecurityNumber
// configura a quantidade de vendas brutas
void CommissionEmployee :: setGrossSales ( double sales )
{
grossSales = ( sales < 0.0 ) ? 0.0 : sales ;
} // fim da funo setGrossSales
// retorna a quantidade de vendas brutas
double CommissionEmployee :: getGrossSales () const
{
return grossSales ;
} // fim da funo getGrossSales
// configura a taxa de comisso
void CommissionEmployee :: setCommissionRate ( double rate )
{
commissionRate = ( rate > 0.0 && rate < 1.0 ) ? rate : 0.0;
} // fim da funo setCommissionRate
// retorna a taxa de comisso
double CommissionEmployee :: getCommissionRate () const
{
return commissionRate ;
} // fim da funo getCommissionRate
// calcula os rendimentos
double CommissionEmployee :: earnings () const
{
return getCommissionRate () * getGrossSales () ;
} // fim da funo earnings
// imprime o objeto CommissionEmployee
void CommissionEmployee :: print () const
{
cout << " empregado comissionado : "
<< getFirstName () << << getLastName ()
<< " \ nnumero do seguro social : " << getSocialSecurityNumber ()
<< " \ nquantidade de vendas : " << getGrossSales ()
<< " \ ntaxa de comissao : " << getCommissionRate () ;
} // fim da funo print
Exemplo30/CommissionEmployee.cpp
1
2
3
4
5
6
7
49
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Exemplo30/BasePlusCommissionEmployee.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
50
Exemplo30/BasePlusCommissionEmployee.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
51
65
cout << endl ;
66
getchar () ; // pausa o programa
67
return 0;
68 } // fim de main
Exemplo30/exemplo30.cpp
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Exemplo 31
Exemplo31/Employee.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
52
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// retorna o nome
string Employee :: getFirstName () const
{
return firstName ;
} // fim da funo getFirstName
// configura o sobrenome
void Employee :: setLastName ( const string last )
{
lastName = last ;
} // fim da funo setLastName
// retorna o sobrenome
string Employee :: getLastName () const
{
return lastName ;
} // fim da funo getLastName
// configura o SSN
void Employee :: setSocialSecurityNumber ( const string ssn )
{
socialSecurityNumber = ssn ; // deve validar
} // fim da funo setSocialSecurityNumber
// retorna o SSN
string Employee :: getSocialSecurityNumber () const
{
return socialSecurityNumber ;
} // fim da funo getSocialSecurityNumber
// imprime informaes de Employee ( virtual , mas no virtual pura )
void Employee :: print () const
{
cout << getFirstName () << << getLastName ()
<< " \ nNumero do seguro social : " << getSocialSecurityNumber () ;
} // fim da funo print
Exemplo31/Employee.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Exemplo31/SalariedEmployee.h
53
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Exemplo31/SalariedEmployee.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
54
25
double hours ; // horas trabalhadas durante a semana
26 }; // fim da classe HourlyEmployee
27
28 # endif // HOURLY_H
Exemplo31/HourlyEmployee.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Exemplo31/HourlyEmployee.cpp
55
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Exemplo31/CommissionEmployee.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
56
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
{
return grossSales ;
} // fim da funo getGrossSales
// calcula os rendimentos ;
// sobrescreve a funo virtual pura earnings em Employee
double CommissionEmployee :: earnings () const
{
return getCommissionRate () * getGrossSales () ;
} // fim da funo earnings
// imprime informaes do CommissionEmployee
void CommissionEmployee :: print () const
{
cout << " Empregado comissionado : " ;
Employee :: print () ; // reutilizao de cdigo
cout << " \ nQuantidade de vendas : " << getGrossSales ()
<< " ; Taxa de comissao : " << getCommissionRate () ;
} // fim da funo print
Exemplo31/CommissionEmployee.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Exemplo31/BasePlusCommissionEmployee.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
57
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Exemplo31/BasePlusCommissionEmployee.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
58
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
hourlyEmployee . print () ;
cout << " \ nSalario $ " << hourlyEmployee . earnings () << " \ n \ n " ;
commissionEmployee . print () ;
cout << " \ nSalario $ " << commissionEmployee . earnings () << " \ n \ n " ;
basePlusCommissionEmployee . print () ;
cout << " \ nSalario $ " << basePlusCommissionEmployee . earnings ()
<< " \ n \ n " ;
// cria um array com quatro ponteiros da classe bsica
Employee * employees [4];
// inicializa o vector com Employees
employees [ 0 ] = & salariedEmployee ;
employees [ 1 ] = & hourlyEmployee ;
employees [ 2 ] = & commissionEmployee ;
employees [ 3 ] = & basePlusCommissionEmployee ;
cout << " Empregados processados polimorficamente usando vinculacao dinamica :\ n \ n " ;
// chama virtualViaPointer para imprimir informaes e rendimentos
// de cada Employee utilizando vinculao dinmica
cout << " Funcao virtual chamada por ponteiros da classe basica :\ n \ n " ;
for ( size_t i = 0; i < 4; i ++ )
virtualViaPointer ( employees [ i ] ) ;
getchar () ; // pausa o programa
return 0;
} // fim de main
// chama funes print e earnings virtual de Employee a partir de um
// ponteiro de classe bsica utilizando vinculao dinmica
void virtualViaPointer ( const Employee * const baseClassPtr )
{
baseClassPtr - > print () ;
cout << " \ nSalario $ " << baseClassPtr - > earnings () << " \ n \ n " ;
} // fim da funo virtualViaPointer
Exemplo31/exemplo31.cpp
59
Referncias
[1]
60