Jump to content
SM

inline, virtual, namespace

Recommended Posts

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:

Share this post


Link to post
Share on other 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

  • Vote 1

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.