Escolar Documentos
Profissional Documentos
Cultura Documentos
C PDF
C PDF
programação C++
Tulio Marcus R. Calixto
Centro de Informática de Ribeirão Preto
Estrutura de um programa
// my first program in C++
#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World!";
return 0;
}
Estrutura de um programa
// my first program in C++
Comentário de linha;
● Todas as linhas começando com 2 barras (//)
serão comentários e não terão nenhum efeito no
comportamento do programa;
● O programador pode usar para incluir pequenas
observações ou explicações dentro do código.
Estrutura de um programa
#include <iostream>
● Linhas começando com # são directivas para o
préprocessador;
● Diz para o préprocessador incluir o arquivo
iostream;
● Biblioteca em C++ para entrada e saída básica.
Suas funções serão usadas no decorrer do
programa.
Estrutura de um programa
using namespace std;
● Todos os elementos de bibliotecas padrão C++
são declaradas dentro de um namespace chamado
std;
● Para acessar suas funcionalidades nós a
declaramos com esta expressão.
Estrutura de um programa
int main ()
● Inicio da função principal;
● É sempre a primeira função a ser executada;
● A função principal é o ponto de partida para
execução de todos os programas C++
Estrutura de um programa
cout << "Hello World!";
● cout representa o fluxo de saída padrão em C++;
● cout é declarado dentro de iostream dentro do
namespace std;
● ; indica o fim de uma instrução C++
Estrutura de um programa
return 0;
● Indica que a função terminou;
● O código de retorno 0 indica que o programa
trabalhou como esperado – sem erros;
Estrutura de um programa
/* my second program in C++
with more comments */
#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World! "; // prints Hello World!
cout << "I'm a C++ program"; // prints I'm a C++
program
return 0;
}
Variáveis e tipos de dados
● Variáveis: Uma parte da memória para armazenar
um determinado valor;
● O computador pode armazenar milhões de
variáveis e executar cálculos sofisticados com
elas;
● Cada variável precisa de um identificador que
distingue uma de outra;
Variáveis e tipos de dados
Identificadores:
● Um identificador válido é uma sequência de uma
ou mais letras, números ou underscore ( _ ) ;
● Não pode haver espaços, símbolos ou caracteres
de pontuação;
● Precisam sempre começar com uma letra;
● Não pode ser uma palavrachave
Variáveis e tipos de dados
● Palavrachave: Palavras reservadas da linguagem C++
asm, auto, bool, break, case, catch, char, class, const, const_cast,
continue, default, delete, do, double, dynamic_cast, else, enum,
explicit, export, extern, false, float, for, friend, goto, if, inline,
int, long, mutable, namespace, new, operator, private,
protected, public, register, reinterpret_cast, return, short,
signed, sizeof, static, static_cast, struct, switch, template, this,
throw, true, try, typedef, typeid, typename, union, unsigned,
using, virtual, void, volatile, wchar_t, while
Variáveis e tipos de dados
● C++ é case sensitive: faz distinção entre letras
maiúsculas e minúsculas;
● Para usar uma variável em C++ nós precisamos
primeiro especificar o tipo de dado que a variável
irá possuir seguida de um identicador de variável
válido;
Ex.: int a
float mynumber
Variáveis e tipos de dados
● Se desejamos declarar várias variáveis de um
mesmo tipo, podemos fazer tudo numa mesma
linha.
Ex.: int a, b, c
Variáveis e tipos de dados
// operating with variables
#include <iostream>
using namespace std;
int main ()
{
// declaring variables:
int a, b;
int result;
Variáveis e tipos de dados
Name Description Size* Range*
signed: -128 to 127
char Character or small integer. 1byte
unsigned: 0 to 255
short int signed: -32768 to 32767
Short Integer. 2bytes
( short) unsigned: 0 to 65535
signed: - 2147483648 to
2147483647
int I nteger. 4bytes
unsigned: 0 to
4294967295
signed: - 2147483648 to
long int 2147483647
Long integer. 4bytes
( long) unsigned: 0 to
4294967295
Boolean value. I t can take one of two
bool 1byte true or false
values: true or false.
float Floating point number. 4bytes +/- 3.4e +/- 38 (~7 digits)
+/- 1.7e +/- 308 (~15
double Double precision floating point number. 8bytes
digits)
long double Long double precision floating point 8bytes
+/- 1.7e +/- 308 (~15
number. digits)
2 or 4
wchar_t Wide character. 1 wide character
bytes
Variáveis e tipos de dados
// process:
a = 5;
b = 2;
a = a + 1;
result = a b;
// print out the result:
cout << result;
// terminate the program:
return 0;
}
Variáveis e tipos de dados
● Escopo de variáveis: Local onde a variável pode
ser vista.
● Variável global: São variáveis declaradas no
corpo principal do código for a de todas as
funções
● Variável local: É declarada dentro do corpo de
uma função ou bloco
Variáveis e tipos de dados
Variáveis e tipos de dados
● Inicialização de variáveis: Quando declaramos
uma variável seu valor default é indeterminado.
● Se quisermos que a variável armazene algum
valor concreto, nós devemos inicializar a
variável.
Ex.: int a = 0;
int a (0);
Variáveis e tipos de dados
// initialization of variables
#include <iostream>
using namespace std;
int main ()
{
int a=5; // initial value = 5
int b(2); // initial value = 2
int result; // initial value undetermined
Variáveis e tipos de dados
a = a + 3;
result = a b;
cout << result;
return 0;
}
Variáveis e tipos de dados
● Strings: sequencia de caracteres.
● C++ prove suporte para strings através da classe
string.
● Para declarar um tipo de dado string nós devemos
incluir uma informação adicional no arquivo de
cabeçalho: <string>
Variáveis e tipos de dados
// my first string
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string mystring;
mystring = "This is the initial string content";
cout << mystring << endl;
Variáveis e tipos de dados
mystring = "This is a different string content";
cout << mystring << endl;
return 0;
}
Constantes
● Constantes são expressões com um valor fixo;
Ex.: #define PI 3.141592625
#define NEWLINE '\n'
Directiva do préprocessador
const int x = 100;
const char tabulator = '\t';
Directiva da linguagem
Constantes
// defined constants: calculate circumference
#include <iostream>
using namespace std;
#define PI 3.14159
#define NEWLINE '\n'
int main ()
{
Constantes
double r=5.0; // radius
double circle;
circle = 2 * PI * r;
cout << circle;
cout << NEWLINE;
return 0;
}
Constantes
\n Newline
\r carriage return
\t Tab
\v vertical tab
\b Backspace
\f form feed (page feed)
\a alert
\a alert (beep)
(beep)
● A partir do momento que possuimos variáveis
nós podemos realizar operações com elas.
● Operador de atribuição
– a = 5;
– c = 90;
Operadores
// assignment operator
#include <iostream>
using namespace std;
int main ()
{
int a, b; // a:?, b:?
a = 10; // a:10, b:?
b = 4; // a:10, b:4
a = b; // a:4, b:4
Operadores
b = 7; // a:4, b:7
cout << "a:";
cout << a;
cout << " b:";
cout << b;
return 0;
}
Operadores
● Aritiméticos
+ addition
- subtraction
* multiplication
/ division
% modulo
Operadores
● Operadores compostos:
+=, =, *=, /=, %=, >>=, <<=, &=, ^=, |=
● Realizam a operação seguida de atribuição
Operadores
// compound assignment operators
#include <iostream>
using namespace std;
int main ()
{
int a, b=3;
a = b;
a+=2; // equivalent to a=a+2
cout << a;
return 0;
}
Operadores
● Incremento e Decremento (++, )
c++;
c+=1;
c=c+1;
Operadores
● Operadores de igualdade
==, !=, >, <, >=, <=
Ex:
(7 == 5) // evaluates to false.
(5 > 4) // evaluates to true.
(3 != 2) // evaluates to true.
(6 >= 6) // evaluates to true.
(5 < 5) // evaluates to false.
Operadores
● Operadores lógicos
!, &&, ||
Ex:
!(5 == 5) // evaluates to false because the expression at its right (5 == 5) is true.
!(6 <= 4) // evaluates to true because (6 <= 4) would be false.
!true // evaluates to false
!false // evaluates to true
Operadores
● Operador &&
a b a && b
true true true
true false false
false true false
false false false
Operadores
● Operador ||
a b a || b
true true true
true false true
false true true
false false false
Operadores
● Operador condicional ( ? )
● Retorna um valor se a expressão é verdadeira e
outro valor se a expressão for falsa.
● Sintaxe: condition ? result1 : result2
Ex:
7==5 ? 4 : 3 // returns 3, since 7 is not equal to 5.
7==5+2 ? 4 : 3 // returns 4, since 7 is equal to 5+2.
Operadores
// conditional operator
#include <iostream>
using namespace std;
int main ()
{
int a,b,c;
a=2;
b=7;
c = (a>b) ? a : b;
cout << c;
return 0;
}
Entrada e Saída básica
● Permite o usuário interagir com o sistema.
● C++ usa streams para realizar entrada e saida
básica de forma sequencial, como no teclado, por
exemplo.
● stream é um objeto onde o programa pode inserir
ou extrair caracteres.
● O arquivo de cabeçalho IOSTREAM contem os
objetos de entrada e saida padrão.
Entrada e Saída básica
● Saída padrão > monitor
● Objeto stream definido para acessar a saída: cout
Ex:
cout << "First sentence.\n ";
cout << "Second sentence.\nThird sentence.";
Entrada e Saída básica
● Entrada padrão: teclado
● Objeto stream definido: cin
● Precisa ser seguido de uma variável
Ex:
int age;
cin >> age;
Entrada e Saída básica
// i/o example
#include <iostream>
using namespace std;
int main (){
int i;
cout << "Please enter an integer value: ";
cin >> i;
cout << "The value you entered is " << i;
cout << " and its double is " << i*2 << ".\n";
return 0; }
Entrada e Saída básica
● cin e strings
● cin pára quando encontra um espaço em branco
● Só é possi entrar palavra por palavra
● Solução: getline
Entrada e Saída básica
// cin with strings
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string mystr;
cout << "What's your name? ";
getline (cin, mystr);
Entrada e Saída básica
cout << "Hello " << mystr << ".\n";
cout << "What is your favorite team? ";
getline (cin, mystr);
cout << "I like " << mystr << " too!\n";
return 0;
}
Entrada e Saída básica
● stringstream.
● O arquivo de cabeçalho <sstream> define uma
classe chamada stringstream.
● Permite tratar objetos strings como streams.
● Pode ser utilizado para converter strings em int e
double
Entrada e Saída básica
Ex:
// stringstreams
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main ()
{
Entrada e Saída básica
string mystr;
float price=0;
int quantity=0;
cout << "Enter price: ";
getline (cin,mystr);
stringstream(mystr) >> price;
cout << "Enter quantity: ";
getline (cin,mystr);
stringstream(mystr) >> quantity;
Entrada e Saída básica
cout << "Total price: " << price*quantity << endl;
return 0;
}
Estruturas de Controle
● Um programa não é limitado a uma sequencia
linear de instuções.
● Pode haver bifurcações, repetição de código e
tomada de decisão.
● Especificam como o programa deve reagir em
determinadas circunstâncias.
Estruturas de Controle
● Com a adição de estruturas de controle segue um
novo conceito: bloco.
● Bloco: Conjunto de instruções agrupadadas e
deliminadas por colchetes {}
● Se o bloco for de apenas uma instrução podese
otimir o {}
Estruturas de Controle
● if / else
● If (condição) bloco de instruções
● Se a condição é verdadeira o bloco de instruções
é executado.
● Se a condição é falsa o bloco é ignorado e o
programa continua após o bloco condicional.
Estruturas de Controle
Exs.
if (x == 100)
cout << "x is 100";
if (x == 100){
cout << "x is ";
cout << x;
}
Estruturas de Controle
● Nós podemos especificar o que nós queremos que
aconteça caso a condição não seja satisfeita. Para
tal utilizamos a palavra reservada: else
Ex:
if (x == 100)
cout << "x is 100";
else
cout << "x is not 100";
Estruturas de Controle
● Concatenando instruções if + else
Ex:
if (x > 0)
cout << "x is positive";
else if (x < 0)
cout << "x is negative";
else
cout << "x is 0";
Estruturas de Controle
● Loops: tem o propósito de repetir o bloco de
instruções um certo número de vezes ou enquanto
uma condição não for estabelecida.
● Loop while
● Sintaxe: while (condição) bloco de instruções
Estruturas de Controle
// custom countdown using while
#include <iostream>
using namespace std;
int main ()
{
int n;
cout << "Enter the starting number > ";
cin >> n;
Estruturas de Controle
while (n>0) {
cout << n << ", ";
n;
}
cout << "FIRE!\n";
return 0;
}
Estruturas de Controle
● Loop: do .. while
● Semelhante ao loop while, exceto que a condição
é testada depois da execução do bloco.
● Garante que o bloco seja executado pelo menos
uma vez.
Estruturas de Controle
Ex.:
// number echoer
#include <iostream>
using namespace std;
int main ()
{
unsigned long n;
Estruturas de Controle
do {
cout << "Enter number (0 to end): ";
cin >> n;
cout << "You entered: " << n << "\n";
} while (n != 0);
return 0;
}
Estruturas de Controle
● Loop: for
● Sintaxe:
– for (inicialização; condição; incremento) bloco;
● Realização uma ação repetitiva com um contador
que é inicializado e incrementado em cada
iteração.
Estruturas de Controle
Ex.:
// countdown using a for loop
#include <iostream>
using namespace std;
int main (){
for (int n=10; n>0; n) {
cout << n << ", ";
}
Estruturas de Controle
cout << "FIRE!\n";
return 0;
}
Estruturas de Controle
● Saltos de blocos
● Break
● Usando o break podemos deixar o loop for, se a
condição do mesmo não é satisfeita;
● Podemos usar para terminar um loop infinito;
● Forçar o fim antes do fim natural
Estruturas de Controle
Ex.:
// break loop example
#include <iostream>
using namespace std;
int main ()
{
int n;
Estruturas de Controle
for (n=10; n>0; n) {
cout << n << ", ";
if (n==3)
{
cout << "countdown aborted!";
break;
}
}
return 0;
}
Estruturas de Controle
● Continue
● Faz o programa ignorar o restante do loop atual e
passa para a proxima iteração.
● Ex.:
Estruturas de Controle
// continue loop example
#include <iostream>
using namespace std;
int main (){
for (int n=10; n>0; n) {
if (n==5) continue;
cout << n << ", ";
}
cout << "FIRE!\n";
return 0;
}
Estruturas de Controle
● Goto
● Permite fazer um salto para um outro ponto do
programa.
● O destino do salto precisa ter um identificador
que é utilizado como argumento para o comando
goto.
● O identificador válido é seguido por dois pontos
(:).
Estruturas de Controle
Ex.:
// goto loop example
#include <iostream>
using namespace std;
int main ()
{
int n=10;
loop:
Estruturas de Controle
cout << n << ", ";
n;
if (n>0) goto loop;
cout << "FIRE!\n";
return 0;
}
Estruturas de Controle
● Switch
● Tem a função de checar muitas opções para poder
tomar uma decisão;
● Pode ser usado no lugar de vários if else
● Sintaxe:
Estruturas de Controle
switch (expression){
case constant1:
group of statements 1;
break;
case constant2:
group of statements 2;
break;
. . .
default:
default group of statements
}
Estruturas de Controle
switch (x) { if (x == 1) {
case 1: cout << "x is 1";
cout << "x is 1"; }
break; else if (x == 2) {
case 2: cout << "x is 2";
cout << "x is 2"; }
break; else {
default: cout << "value of x
cout << "value of x unknown";
unknown"; }
}
Funções
● Utilizando funções podemos estruturar nosso
programa de forma mais modular.
● Função é um grupo de instruções que são
executadas quando chamadas em algum ponto do
programa.
● Sintaxe:
– tipo nome ( parametro1, parametro2, ...)
{ instruções }
Funções
● Onde:
– Tipo: Tipo de dado retornado pela função
– Nome: Identificador pelo qual será possivel chamar a
função
– Parametros: Cada parametro consiste em um tipo de
dado específico seguido por um identificador
– Instruções: Formam o corpo da função
Funções
Ex.:
// function example
#include <iostream>
using namespace std;
int addition (int a, int b){
int r;
r=a+b;
return (r);
}
Funções
int main ()
{
int z;
z = addition (5,3);
cout << "The result is " << z;
return 0;
}
Funções
Ex.2:
// function example
#include <iostream>
using namespace std;
int subtraction (int a, int b){
int r;
r=ab;
return (r);
}
Funções
int main (){
int x=5, y=3, z;
z = subtraction (7,2);
cout << "The first result is " << z << '\n';
cout << "The second result is " << subtraction (7,2) << '\n';
cout << "The third result is " << subtraction (x,y) << '\n';
z= 4 + subtraction (x,y);
cout << "The fourth result is " << z << '\n';
return 0;
}
Funções
● Funções sem tipo: void
● Função que exibe uma mensagem na tela
● Ex.:
Funções
// void function example
#include <iostream>
using namespace std;
void printmessage (){
cout << "I'm a function!";
}
int main ()
{
printmessage ();
return 0;
}
Funções
● Argumentos podem ser passador por valor ou por
referência
● Até agora os argumentos foram passados por
valor
int x=5, y=3, z;
z = addition ( x , y );
Funções
● Passamos os valores de x e y (5, 3) e não as
variáveis x e y
● Os valores das variáveis a e b passam a ser 5 e 3
● Modificações nos valores de a e b não modificam
os valores de x e y, pois apenas cópias dos
valores foram passados para a função.
● Se quisermos que os valores de x e y sejam
modificados precisamos passar os dados por
referência
Funções
// passing parameters by reference
#include <iostream>
using namespace std;
void duplicate (int& a, int& b, int& c){
a = a * 2;
b = b * 2;
c = c * 2;
}
Funções
int main ()
{
int x=1, y=3, z=7;
duplicate (x, y, z);
cout << "x=" << x << ", y=" << y << ", z=" << z;
return 0;
}
Funções
● Na declaração da função os tipos de dados de
cada parametro são seguidos por um sinal &
● & indica que os paramentros são passados por
referência
Funções
Ex.2:
// more than one returning value
#include <iostream>
using namespace std;
void prevnext (int x, int& prev, int& next){
prev = x1;
next = x+1;
}
Funções
int main ()
{
int x=100, y, z;
prevnext (x, y, z);
cout << "Previous=" << y << ", Next=" << z;
return 0;
}
Funções
● Valores padrões em paramentros
● Quando declaramos uma função podemos usar
valores default para os parametros
● O valor default será usado se o argumento
correspondente for deixado em branco quando a
função é chamada.
● Se os valores forem passados para a função, os
valores default serão ignorados
Funções
// default values in functions
#include <iostream>
using namespace std;
int divide (int a, int b=2){
int r;
r=a/b;
return (r);
}
Funções
int main ()
{
cout << divide (12);
cout << endl;
cout << divide (20,4);
return 0;
}
Funções
● Sobrecarga de funções
● Em C++ duas funções podem ter o mesmo nome,
se:
– Possuírem tipo e ou número de parametros diferentes
Funções
Ex.:
// overloaded function
#include <iostream>
using namespace std;
int operate (int a, int b){
return (a*b);
}
float operate (float a, float b){
return (a/b);
}
Funções
int main (){
int x=5,y=2;
float n=5.0,m=2.0;
cout << operate (x,y);
cout << "\n";
cout << operate (n,m);
cout << "\n";
return 0;
}
Funções
● Recursividade
● Propriedade que as funções têm de chamase a si
mesmo.
● Cálculo de fatorial
● Ordenação
Funções
Ex.:
// factorial calculator
#include <iostream>
using namespace std;
long factorial (long a){
if (a > 1)
return (a * factorial (a1));
else
return (1);
}
Funções
int main ()
{
long number;
cout << "Please type a number: ";
cin >> number;
cout << number << "! = " << factorial (number);
return 0;
}
Funções
● Declarando funções
● Funções precisam ser declaradas antes de serem
chamadas
● Até agora a função main era construído depois de
todas as outras funções
● Solução: declarar as funções
Funções
Ex.:
// declaring functions prototypes
#include <iostream>
using namespace std;
void odd (int a);
void even (int a);
Funções
int main (){
int i;
do {
cout << "Type a number (0 to exit): ";
cin >> i;
odd (i);
} while (i!=0);
return 0;
}
Arrays
● Conjunto de elementos do mesmo tipo de dado
● Localizados em regiões de memória contígua
● Podem ser referenciados individualmente através
de um identificador
Arrays
● Declarando arrays
– int billy [5];
● Inicializando arrays
– int billy [5] = { 16, 2, 77, 40, 12071 };
● Acessando elemento
– a = billy[2];
Arrays
Arrays
Ex.:
// arrays example
#include <iostream>
using namespace std;
int billy [] = {16, 2, 77, 40, 12071};
int n, result=0;
Arrays
int main ()
{
for ( n=0 ; n<5 ; n++ )
{
result += billy[n];
}
cout << result;
return 0;
}
Arrays
● Arrays multidimensionais
● Declaração
– int jimmy [3][5];
Arrays
● Acessando elemento
– int a = jimmy [1][3];
Arrays
Ex.:
#define WIDTH 5
#define HEIGHT 3
int jimmy [HEIGHT][WIDTH];
int n,m;
Arrays
int main (){
for (n=0;n<HEIGHT;n++)
for (m=0;m<WIDTH;m++)
{
jimmy[n][m]=(n+1)*(m+1);
}
return 0;
}
Arrays
● Gerar números aleatórios:
– numero= rand() % valor_maximo;
● Precisa do arquivo de cabeçalho:
– #include <stdlib.h>
Arrays
● Exercício:
● Crie uma matriz quadrada 10x10
● Insira todos os elementos randomicamente
● Exiba o resultado da multiplicação dos elementos
da diagonal principal MENOS a multiplicação
dos elementos da diagonal secundária da matriz
Arrays
● Dicas
● Diagonal Principal: linha = coluna
● Diagonal Secundária: (linha + coluna) =
(dimensao – 1)
● Para percorrer a matriz use:
for (linha)
for (coluna)
Classes e Objetos
● Classe
– Definem os atributos de um objeto
– Definem o que um objeto pode fazer
● Objetos
– É a realização da classe
Classes e Objetos
Ex.:
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area (void);
} ;
Classes e Objetos
● Modificadores de acesso
● Private: Acessivel somente por membros da
classe.
● Public: Acessivel de qualquer lugar onde o objeto
é visivel.
Classes e Objetos
// classes example
#include <iostream>
using namespace std;
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area () {return (x*y);}
};
Classes e Objetos
void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}
int main () {
CRectangle rect;
rect.set_values (3,4);
cout << "area: " << rect.area();
return 0;
}
Classes e Objetos
● Construtor
● Metodo utilizado para inicializar as variaveis de
um objeto
● É chamado automaticamente quando o objeto é
criado
● Precisa ter o mesmo nome da classe e não deve
ter nenhum dado de retorno
Classes e Objetos
● Sobre carga de construtores
// overloading class constructors
#include <iostream>
using namespace std;
class CRectangle {
int width, height;
public:
CRectangle ();
CRectangle (int,int);
int area (void) {return (width*height);}
};
Classes e Objetos
CRectangle::CRectangle () {
width = 5;
height = 5;
}
CRectangle::CRectangle (int a, int b) {
width = a;
height = b;
}
Classes e Objetos
int main () {
CRectangle rect (3,4);
CRectangle rectb;
cout << "rect area: " << rect.area() << endl;
cout << "rectb area: " << rectb.area() << endl;
return 0;
}
Classes e Objetos
● Herança
● Permite criar classes que são derivadas de outras
classes
● Inclui todas as caracteristicas da classe pai + suas
próprias
● Para indicar herença utilizamos ( : )
– class CRectangle: public CPolygon
Classes e Objetos
● Ex.:
Classes e Objetos
// derived classes
#include <iostream>
using namespace std;
class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b);
};
void CPolygon::set_values (int a, int b){
width=a; height=b;
}
Classes e Objetos
class CRectangle: public CPolygon {
public:
int area ();
};
int CRectangle::area(){
return (width * height);
}
class CTriangle: public CPolygon {
public:
int area ();
};
Classes e Objetos
int CTriangle::area(){
return (width * height / 2);
}
int main () {
int a, b, c, d;
cout << "Informe a base do retangulo: ";
cin >> a;
cout << "Informe a altura do retangulo: ";
cin >> b;
Classes e Objetos
cout << "Informe a base do triangulo: ";
cin >> c;
cout << "Informe a altura do triangulo: ";
cin >> d;
CRectangle rect;
CTriangle trgl;
Classes e Objetos
rect.set_values (a, b);
trgl.set_values (c, d);
cout << "Area do retangulo: " << rect.area() <<
endl;
cout << "Area do triangulo: " << trgl.area() <<
endl;
return 0;
}