SM Posted February 16, 2013 at 06:57 PM Report #495613 Posted February 16, 2013 at 06:57 PM 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. 😕
HappyHippyHippo Posted February 16, 2013 at 07:20 PM Report #495623 Posted February 16, 2013 at 07:20 PM 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 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now