Objectivos
 Componentes principais do Developer Studio
 Projectos e como criá-los
 Desenvolver programas
 Compilar, linkar, depurar e executar programas
Developer Studio
- é um ambiente de desenvolvimento integrado para criar, compilar, linkar,
depurar e testar programas
 Editor – ambiente interactivo para criar e editar o código
fonte (*.cpp, *.h)
 Compilador – converte o código fonte na linguagem de
máquina (*.obj)
 Linker – combina os módulos gerados pelo compilador com
os módulos das bibliotecas de programas
 Bibliotecas – extendem a linguagem C++ com as rotinas que
não fazem parte da C++.
Janela do
editor
Janela de
projecto
Janela de saída
Uma barra de ferramentas ancorável pode ser
arrastada com o rato de forma a reposicioná-la
na janela, por exemplo:
Quando está posicionada numa das quatro extremidades da janela,
diz-se que está ancorada, tal como as barras de ferramentas que se
vêm no topo das janelas de aplicações
Se arrastarem uma barra de ferramentas ancorável da sua posição
(ancorada), parecerá uma pequena janela. Neste estado é chamada
barra de ferramentas flutuante
Pressionar com o botão direito do rato sobre a barra de
ferramentas fará aparecer uma lista de barras disponíveis
Por exemplo, podemos mover a barra de
ferramentas da posição ancorada para
uma posição normal e vice-versa
Todas estas
barras de
ferramentas
são ancoráveis
Existe outra maneira. Podem pressionar com
o botão direiro do rato aqui e podem seleccionar
uma opção do menu pop-up respectivo
Uma barra de ferramentas
é completa quando possui
tooltips. Se o ponteiro do
rato permanecer sobre um
botão durante um ou dois
segundos, aparecerá uma
etiqueta amarela contendo
informação acerca da
funcionalidade desse botão
assim como uma
combinação de
teclas de atalho
Usaremos um novo projecto para cada
programa que desenvolvermos
Um ambiente de trabalho pode conter vários projectos.
Um projecto define todas as partes que irão constituir o programa.
Está contido num único directório que contém todos os ficheiros
de definição do projecto e o vosso código fonte
Este directório de projecto contém também outros directórios
que guardam, por exemplo, os resultados da compilação e de
linking do vosso projecto
A definição de um projecto inclui:
– O nome do projecto;
– Uma lista com todos os ficheiros com código fonte;
– A definição do tipo de programa que será construído
a partir dos ficheiros com código fonte, como por exemplo,
um programa executável (.exe) para Windows ou uma
aplicação de consola;
– Um conjunto de opções do editor, compilador,
linker e outros componentes do Visual C++;
– As janelas que são visualizadas quando o projecto é aberto.
Quando criam um novo projecto o ambiente gera automaticamente
configurações para produzir duas versões da vossa aplicação.
Uma inclui informação que vos irá ajudar a depurar o programa,
chamada Debug Version. A outra, chamada Release Version,
não inclui informação de depuração mas tem opções activas
relativas ao compilador para optimização do código, de forma
a obtermos um módulo executável, o mais eficiente possível.
Podem escolher a versão do
programa que pretendem
seleccionando a configuração
respectiva
Primeiro seleccionam New…
a partir do menu File
Como resultado poderão ver
o seguinte menu
Esta caixa de
diálogo permite
introduzir o tipo,
nome e localização
do vosso projecto
Se simplesmente introduzirem
nome do projecto, será criado
automaticamente um directório
com esse nome, a não ser que
este já exista
Quando carregarem no
botão Ok o novo projecto
será criado
Vocês podem criar um dos
quatro tipos possíveis de
aplicações que estão
representadas na figura
Podem comutar entre estas
janelas seleccionando o
separador da janela
que pretendem.
Podem ver que foram adicionados
dois separadores à janela de
projecto que mostram a
ClassView e a FileView
Iremos escolher a opção
“A simple aplication”
Carreguem no botão “Finish” para completar a criação do projecto
A ClassView mostra as classes definidas no vosso projecto e
o conteúdo de cada classe
Não temos nenhuma classe nesta aplicação e por isso
a janela está vazia
A FileView mostra os ficheiros que constituem o projecto
Podem visualizar o conteúdo de qualquer ficheiro do projecto
pressionando duas vezes com o botão esquerdo do rato sobre
o nome do ficheiro na FileView
Isto abrirá uma janela para o ficheiro e invocará
automaticamente um editor que vos permitirá modificar
o conteúdo do ficheiro
*.cpp
*.h
Código fonte
*.dsp
Definição do projecto (nome, lista de ficheiros, opções do
compilador, etc.)
*.opt
Opções do espaço de trabalho (janelas abertas, etc.)
*.dsw
Indica os projectos incluidos no espaço de trabalho
*.ncb
Informação de pesquisa (browse) para Developer Studio
*.html
Log file (informação visualizada na janela de saída)
Nunca deve editar estes ficheiros à mão
/Debug
*.obj
Ficheiros produzidos pelo compilador
*.exe
Ficheiro executável produzido pelo linker
*.ilk
Incremental linking (usa-se quando os ficheiros fonte sofreram
alterações não significativas)
*.pch
Pre-compiled header
*.pdb
Informação de depuração
*.idb
Informação de depuração adicional
*.bsc
Informação de pesquisa (browse) para o utilizador
Nunca deve editar estes ficheiros à mão
Stdafx.h
Stdafx.cpp
Estes ficheiros são utilizados para construir o pre-compiled header
No ficheiro Stdafx.h deve incluir ficheiros de cabeçalho que são
utilizados frequentemente
mas que são modificados com pouca frequência
#include "stdafx.h"
int main(int argc, char* argv[])
{
Este é o esqueleto do
0; principal
nossoreturn
programa
}
#include "stdafx.h"
Existem aqui três
grupos
de ficheiros:
Source
(código
fonte),
Este
ficheiro
inclui apenas
alguns
dados
standard.
Header (definição
dos interfaces
dasminúsculas
classes) e Resource
Prestem
atenção às
e maiúsculas
(recursos – menus, barras de
ferramentas,
ícones, etc.)
nos
ficheiros header
// ……………….
// TODO: reference additional headers your program requires here
#include
<iostream.h>
Por exemplo:
// ……………...
Neste ficheiro encontrarão a seguinte linha. Deve adicionar aqui
os headers que o vosso programa requer
int main(int argc, char* argv[])
{
Aqui cout é o nome de um objecto que é usado quando queremos
cout << "nosso primeiro programa" << endl;
mostrar dados no ecrã. Para utilizar este objecto devemos incluir o
return 0;
respectivo
comqualquer
o nome iostream.h.
Isto pode ser feito num
Como não header
possuímos
classe, o separador
}
específico
do ficheiro StdAfx.h
FileView tem osítio
seguinte
aspecto
#include <iostream.h>
Escrevam o seguinte programa. Adicionem esta linha ao programa.
Ctrl-F5
Para compilar, efectuar o linking e
executar o vosso programa
pressionem Ctrl-F5
Vamos incluir um ficheiro novo ao nosso projecto.
Para este fim precisamos executar os seguintes passos:
Não se esqueçam de inserir esta linha. Se acrescentam qualquer
ficheiro CPP novo, devem inserir esta linha
#include "stdafx.h"
void multiply_display (int a, int b)
{
cout << “Vamos multiplicar dois inteiros\n”;
int c;
c = a * b;
cout << "a * b = " << c << endl;
}
Por favor escrevam e corram este programa simples.
Devem repetir os passos que vos foram mostrados
Vamos ver agora como podem depurar o vosso programa
Pressionem de novo a mesma tecla
F10
Se pressionarem a tecla F10
o depurador passará para a
próxima linha do programa
F11
Por favor façam isso para que compreendam
a diferença entre o F10 e o F11
Se pressionarem periodicamente a tecla F10 o controlo não será
passado para as funções, tal como multiply_display();. Se pretendem
entrar no corpo da função devem pressionar F11 quando estiver
activa a linha com a invocação da função
Comecem a depuração. Para isso pressionem F10 e
depois seleccionem as seguintes opções
F10…F10 e depois
F11 para entrar à
função
multiply_display()
Se quiserem terminar a depuração seleccionem esta opção
Usem esta opção para correr
o vosso programa até ao cursor
Podem ver também os resultados intermédios do vosso programa
numa janela de contexto na parte inferior do ecrã
Se colocarem o cursor sobre
qualquer variável poderão
ver o seu valor actual, como
por exemplo, b=7
Pressionem F9 se quiserem inserir um ponto de paragem
(breakpoint). Para executar o programa até ao ponto de paragem
pressionem F5. Para remover o ponto de paragem coloquem
o cursor na linha respectiva e pressionem de novo F9
Por favor executem todas estas operações
Agora vamos criar uma classe
isto significa right mouse click
constructor
destructor
Este código vai ser criado automaticamente
class livro
{
public:
livro();
virtual ~livro();
};
Se quiseremos introduzir uma
variável, podemos fazer o seguinte:
O destructor é uma função virtual. Ela não é significativa
neste contexto e por isso vai ser considerada posteriormente
Agora temos:
Agora temos:
Podemos usar os
class livro
mesmos passos para
{
introduzir uma nova
public:
variável, por exemplo
livro();
virtual ~livro(); o ano quando o livro
foi publicado
private:
char* titulo;
De notar, que
};
os valores dos
campos
class livro
ano e título não
{
Por outras palavras, estão definidos
public:
os campos
livro();devem,
em
geral,
virtual
~livro();
ser inicializados
private:
unsigned ano;
char* titulo;
};
Este trabalho é efectuado por uma função especial
que é chamada construtor da classe
O construtor da classe possui o mesmo nome que a classe e não
devolve nenhum valor, nem do tipo void. Todas as outras
características de um construtor de uma classe são semelhantes
às de um método normal
Vamos acrescentar o seguinte código ao constructor:
class livro
{
public:
livro(char*, unsigned);
virtual ~livro();
private:
unsigned ano;
char* titulo;
};
livro::livro(char* T, unsigned A)
{
titulo = T; ano = A;
}
Agora vamos incluir algumas funções na classe livro (ao tipo novo
livro), por exemplo:
Para incluir as
1. char* Qual_é_o_titulo(void);
funções podemos usar
2. unsigned Quando_foi_publicado(void);
os mesmos passos,
3. void Imprimir_os_dados(void);
por exemplo
Finalmente a nossa classe vai ser apresentada da seguinte forma:
char* livro::Qual_e_o_titulo()
{
return titulo;
}
unsigned livro::Quando_foi_publicado()
{
return ano;
}
void livro::Imprimir_os_dados()
{
cout << "Titulo: " << titulo
<< "; Ano: " << ano << endl; }
Consideremos a seguinte função main:
int main(int argc, char* argv[])
{
livro PPO("C++",2000);
PPO.Imprimir_os_dados();
cout << "livro: " << PPO.Qual_e_o_titulo() << '\t'
<< PPO.Quando_foi_publicado() << endl;
cout << "nosso primeiro programa" << endl;
return 0;
}
Neste caso os resultados do nosso programa vão ser os seguintes:
class livro
{ public:
Vamos supor que
void Imprimir_os_dados(void);
nós gostaríamos
unsigned Quando_foi_publicada(void);
de definir algum
char* Qual_e_o_titulo();
ponteiro para o
livro(char*, unsigned);
objecto do tipo
virtual ~livro();
livro. Neste caso
private:
precisamos de usar
unsigned ano;
a seguinte notação:
char* titulo; };
Os resultados são os
seguintes:
int main(int argc, char* argv[])
{
livro *meu_livro;
livro PPO("C++",2000);
meu_livro = &PPO;
meu_livro->Imprimir_os_dados();
Existem algumas opções que são muito úteis para desenvolver
o vosso programa. Vamos abordar algumas delas.
Esta opção permite ver e
seleccionar as classes do
programa e os membros delas,
por exemplo
Temos muitas
outras opções
importantes
Podemos ver onde esta função foi definida
Como o vosso programa pode ser organizado:
1. Headers (por exemplo livro.h) têm as respectivas declarações,
por exemplo:
class livro
{
public:
void Imprimir_os_dados(void);
unsigned Quando_foi_publicado(void);
char* Qual_e_o_titulo();
livro(char*, unsigned);
virtual ~livro();
private:
unsigned ano;
char* titulo;
};
2. Ficheiros .cpp (por exemplo livro.cpp) têm as respectivas
definições (implementações), por exemplo:
livro::livro(char* T, unsigned A)
{
titulo = T; ano = A;
}
char* livro::Qual_e_o_titulo()
{
return titulo;
}
unsigned livro::Quando_foi_publicado()
{
return ano;
}
// etc.
3. O ficheiro principal tem a seguinte forma:
#include "stdafx.h"
Todos os headers que
#include "multiply_display.h"
nós precisamos de usar
#include "livro.h"
para o nosso programa
int main(int argc, char* argv[])
principal
{
livro *meu_livro;
livro PPO("C++",2000);
meu_livro = &PPO;
meu_livro->Imprimir_os_dados();
PPO.Imprimir_os_dados();
cout << "livro: " << PPO.Qual_e_o_titulo() << '\t'
<< PPO.Quando_foi_publicada() << endl;
cout << "nosso primeiro programa" << endl;
multiply_display (49, 11);
return 0;
}
4. Os diferentes ficheiros podem ser organizados da seguinte
forma:
#include "stdafx.h"
multiply_display.cpp
void multiply_display (int a, int b)
{
cout << "Vamos multiplicar dois inteiros\n";
int c;
c = a * b;
cout << "a * b = " << c << endl;
}
void multiply_display (int a, int b);
multiply_display.h
Download

ppt