Ir para o conteúdo
SM

inline, virtual, namespace

Mensagens Recomendadas

SM

Boas,

seria possível alguém explicar-me o que significa uma função ser inline , friend ou virtual?

Alguém me pode dizer também como especificar que várias classes pertencem a um mesmo namespace?

Isso deve ser definido no .h ou .cpp?

Tou agora a começar a aprender c++ 11 e tá díficil compreender as regras de separação dos .cpp e .h e o que se põe em cada um deles.

:confused:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

estás a perguntar muita coisa, mas vamos lá por partes:

o que vai para o .h é a especificação das classes com os seu métodos, e nos .cpp é onde se encontra a implementação desses métodos. isto sempre para classes que não sejam template, porque essas necessitam que seja tudo no .h

exemplo:

// classe.h
class Class
{
public:
 int f();
}; // <--- nunca esquecer o ponto e virgula no final da declaração da classe !!!!!!!!!!

// classe.cpp
int Class::f()
{
 return 10;
}

--------------

a palavra reservada virtual serve para demarcar as funções como passíveis de serem "sobrepostas" nas classes derivadas.

exemplo:

#include <iostream>
using namespace std;

class A
{
 virtual int foo() { return 10; }
 int bar()         { return 20;}
};

class B : public A
{
 virtual int foo() { return 100; }
 int bar()         { return 200;}
};

int main()
{
 A * a = new A();
 A * b = new B();

 cout << "A.foo() >> " << a->foo() << endl; // output = 10
 cout << "A.bar() >> " << a->bar() << endl; // output = 20
 cout << "B.foo() >> " << b->foo() << endl; // output = 100
 cout << "B.bar() >> " << b->bar() << endl; // output = 20 (não é 200 porque a função não é virtual, a função chamada é a de A)

 return 0;
}

-------------------

a palavra reservada friend serve para dar acesso completo aos parâmetros e membros de uma classe a outra

exemplo:

class A;
class B;
class C;

class A
{
 friend class B;

protected:
 int i;
};

class B
{
 int foo(A a) {
   return A.i; // não existe problemas porque como a classe B é "friend" da classe A, tem acesso ao parâmetro "i" protegido
 }
};

class C
{
 int foo(A a) {
   return A.i; // erro de compilação porque a classe C não tem acesso ao parâmetro protegido "i" da classe A
 }
};

------------------------------

a palavra reservada inline é usada para optimização de código. é um ponto um bocado avançado e por tal não te deverias debruçar ainda muito nesse aspecto.

resumidamente, serve para sinalizar o compilador para que sempre que a função seja chamada, em vez de ocorrer o processo normal de "lançamento" de uma função, o código da função seja "embutido" no local da chamada. dai a designação : inline, o código não está noutro local, é sim inserido directamente no local da chamada.

isto normalmente leva a aumento de rapidez. mas quando metes de um lado, estás a tirar doutro. por isso é que é necessário saber bem o que se está a fazer quando se usa este tipo de processo.

nota : isto é feito no momento da compilação. tu escreves o código normalmente, é trabalho do compilador, de quando criar o ficheiro final de fazer este processo todo

  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.