Tag: Classes

Programação avançada – capitulo 3

Objetos
A palavra new permite criar novos objetos
Os delimitadores dos { } permitem define o scope dos objetos

Em java existe o Garbage collector, que detecta todos os objetos que foram criados por new e que já não são referenciados em memória, libertanto desta forma o espaço em memória correspondente (esta dinâmica não existe noutras linguagens como em C, ou o destrutor em C++)

Um classe é constituída por:
membros variáveis (do tipo primitivos ou referências para objetos) Para se usar os membros de um determinado objeto faz-se uso do . (ponto final)
por métodos (podem existir métodos com o mesmo nome na mesma classe, são os métodos overloaded )
por um ou mais construtores (é a forma de garantir a inicialização de todos os objetos de uma classe, e o construtor não pode ser chamado por um seu método)

package e08;

class Texto{
    String palavras;
    int numero_paginas;
    
    Texto(){
        palavras = "vazio";
        numero_paginas = 0;
    }
    
    Texto(String p, int n_p){
        palavras = p;
        numero_paginas = n_p;
    }
    
    boolean valida(int n_p){
        if(n_p <=0){
            return false;
        }
        return true;
    }
}

public class e08 {

    public static void main(String args[]) {
        System.out.println("\n O uso de classes");
        Texto t1 = new Texto();
        System.out.println("\n construtor por defeito: " + t1.numero_paginas + " - " + t1.palavras);
        Texto t2 = new Texto("pedro", 100);
        System.out.println("\n construtor overloaded: " + t2.numero_paginas + " - " + t2.palavras);
        
    }
}

A palavra chave this:
Permite aceder a uma variável ou a um método do próprio objeto
o this também pode ser usado dentro de um construtor, o this faz uma chamada explicita ao construtor (com ou sem argumentos)
um construtor pode então desta forma ser chamado a partir de outro construtor

package e09;

class Texto{
    String palavras;
    int numero_paginas;
    
    Texto(){
        this("vazio", 100);
    }
    
    Texto(String p, int n_p){
        palavras = p;
        numero_paginas = n_p;
    }
    
    boolean valida(int n_p){
        if(n_p <=0){
            return false;
        }
        return true;
    }
}

public class e09 {

    public static void main(String args[]) {
        System.out.println("\n O uso da referência especial this");
        Texto t1 = new Texto();
        System.out.println("\n construtor por defeito: " + t1.numero_paginas + " - " + t1.palavras + " - " + t1.valida(t1.numero_paginas));
    }
}

São membros static:
Aquelas variáveis ou os membros que não estão ligados a qualquer objeto em particular
Só existe uma versão de um membro variável estático, partilhada por todos os objetos
Antes de se criar um objeto, podemos executar o método static ou aceder a qualquer variável static
Os métodos static, não têm a referência a this
Não se pode aceder directamente a variáveis ou métodos não estáticos (pois eles estão sempre ligados a um objeto em particular, e assim só se pode aceder a membros não estáticos se for invocado a partir de um objeto)

package e10;

class Texto {

    String palavras;
    static int numero_paginas = -1;

    Texto() {
        this("vazio", 100);
    }

    Texto(String p, int n_p) {
        palavras = p;
        numero_paginas = n_p;
    }

    static boolean valida(int n_p) {
        if (n_p <= 0) {
            return false;
        }
        return true;
    }
}

public class e10 {

    public static void main(String args[]) {
        System.out.println("\n membros static");
        System.out.println("\n aceder ao métodos antes do objeto: " + Texto.valida(100));
        Texto t1 = new Texto();
        System.out.println("\n aceder ao métodos depois do objeto: " + t1.valida(Texto.numero_paginas));
    }
}

A inicialização
Os membros variáveis das classes se forem usados sem estarem inicializados vão dar erro
É preferível inicializar essas variáveis ou então fazê-lo no construtor, com valores pode defeito
Se forem membros estáticos, eles são inicializados apenas uma vez, quando a classe for usada pela primeira vez
Nos objetos:
são inicializados os membros variáveis e depois o construtor

package e11;

class Texto {

    String palavras;
    int numero_paginas = -1;

    Texto() {
        palavras = "vazio original";
        System.out.println("\n construtor do texto: " + palavras);
    }

    Texto(String p, int n_p) {
        palavras = p;
        numero_paginas = n_p;
        System.out.println("\n segundo construtor do texto: " + palavras);
    }

    static boolean valida(int n_p) {
        if (n_p <= 0) {
            return false;
        }
        return true;
    }
}

class Livro {
    Texto t1 = new Texto("no livro", 100);

    Livro() {
        System.out.println("\n construtor do Livro: " + t1.palavras);
    }
    
    void mostra(){
        System.out.println("\n mostra do Livro");
    }
    static Texto t2 = new Texto("static no livro", 100); //primeiro a ser executado
}

public class e11 {

    public static void main(String args[]) {
        System.out.println("\n inicialização:");
        Livro l1 = new Livro();
        System.out.println("\n no main:" + l1.t1.palavras);
        l1.mostra();

    }
}

Tags : , , , , , , , , , , , , ,

estudar11 – classes e a herança híbrida e múltipla

#include <cstdlib>
#include <iostream>

using namespace std;

class Avo{

public:
    
    void mostraMsg(){
        cout << "eu sou milionario\n";
    };
};

class Mae{

public:
        void verifica(){
        cout << "eu sou inteligente\n";
    };
};


class Pai : public Avo{

public:
};

class Filho : public Pai, public Mae{

public:
};

int main(int argc, char** argv) {
    Filho f;
    
    f.verifica();
    f.mostraMsg();
    
    return 0;
}

Tags : , , ,

estudar09 – classes e a herança ()

#include
#include

using namespace std;

class pai{

public:

void dinheiro(){
cout << "eu sou um milionario";
}

};

class filho : public pai{
//a classe filho herdou a função do pai através do principio da herança;

public:

};

int main(int argc, char** argv) {
filho s;

s.dinheiro();

return 0;
}
Tags : , , ,

estudar08 – classes e construtores

#include <cstdlib>
#include <iostream>

using namespace std;

class Estudante{

    int notas;
    
public:
    
    Estudante(int p=50){ 
    //construtor: evitar que a classe tenha lixo qd começa
    //que a classe comece com valores vladios qd começa
    //consrutor parameterizado (int p)
    //ou podemos iniciar o construtor logo com o valor (int p=50)    
        
        notas=p;
    }
    
    void getDados(){
        cout << notas;
    }
    
    void setDados(){
        cout << "\n Qual a nota ";
        cin >> notas;
    }
    

};

int main(int argc, char** argv) {
    Estudante s;
    
    s.getDados();
    return 0;
}
Tags : , ,

estudar07 – classes II

#include <cstdlib>
#include <iostream>

using namespace std;

class estudante{

    int id;
    char name[20];
    int s1;
    int s2;
    int s3;
    
public:
    void getDados(){
        cout << "\nqual o id? ";
        cin >> id;
        cout << "\nqual o nome? ";
        cin >> name;
        cout << "\nQual a nota da UC1 ?";
        cin >> s1;
        cout << "\nQual a nota da UC2 ?";
        cin >> s2;
        cout << "\nQual a nota da UC1 4";
        cin >> s3;
    }

    void mostraDados(){
        cout << "\n" << id << "\t" << name << "\t" << s1 << "\t" << s2 << "\t" << s3;
    }

};

int main(int argc, char** argv) {
    estudante s[10]; //array de objectos
    int n;
    
    cout << "\nQuantos estudantes? ";
    cin >> n;
    
    for(int i=0; i< n ; i++){
        s[i].getDados();
    }
    for(int i=0; i< n ; i++){
        s[i].mostraDados();
    }
        
    return 0;
}
Tags : , ,

estudar06 – classes

#include <cstdlib>
#include <iostream>

using namespace std;
//classes: classificação de alguma coisa

class estudante{
    
    //os atributos e propriedades, as variaveis
    int id;
    int notas;
    
    //membros da classe estudante, as funcoes dentro da classe
    
public:
    void getDados(){
        cout << "\n qual o seu id?";
        cin >> id;
        cout <<"\n qual a sua nota?";
        cin >> notas;
    }
    void mostraDados(){
        cout << "\n" << id << "\t" << notas << "\n";
    }
};


int main(int argc, char** argv) {
    estudante novo; //novo: instancia da classe estudante
    novo.getDados();
    novo.mostraDados();
    
    
    return 0;
}
Tags : ,