Última atualização:2026-10-12
Declarações e aliases com using em C++¶
Sobre o autor:¶
Conta oficial do WeChat:

Uso básico¶
Using local e global; as operações concretas e o uso estão nos exemplos a seguir:
#include <iostream>
#define isNs1 1
//#define isGlobal 2
using namespace std;
void func()
{
cout<<"::func"<<endl;
}
namespace ns1 {
void func()
{
cout<<"ns1::func"<<endl;
}
}
namespace ns2 {
#ifdef isNs1
using ns1::func; /// ns1中的函数
#elif isGlobal
using ::func; /// 全局中的函数
#else
void func()
{
cout<<"other::func"<<endl;
}
#endif
}
int main()
{
/**
* 这就是为什么在c++中使用了cmath而不是math.h头文件
*/
ns2::func(); // 会根据当前环境定义宏的不同来调用不同命名空间下的func()函数
return 0;
}
Alterando a acessibilidade¶
class Base{
public:
std::size_t size() const { return n; }
protected:
std::size_t n;
};
class Derived : private Base {
public:
using Base::size;
protected:
using Base::n;
};
A classe Derived herda Base de forma privada, de modo que, para ela, a variável membro n e a função membro size são privadas; com o uso da instrução using, é possível alterar a acessibilidade delas — como no exemplo acima, size passa a ser acessível com permissão public e n com permissão protected. O código completo está em: derived_base.cpp
Sobrecarga de funções¶
No processo de herança, a classe derivada pode ocultar zero ou mais instâncias de funções sobrecarregadas; assim que uma versão sobrecarregada é definida, as demais versões sobrecarregadas ficam invisíveis.
Se, para as funções sobrecarregadas da classe base, precisarmos modificar uma na classe derivada e ainda assim manter as demais visíveis, é preciso sobrecarregar todas as versões — algo muito trabalhoso.
#include <iostream>
using namespace std;
class Base{
public:
void f(){ cout<<"f()"<<endl;
}
void f(int n){
cout<<"Base::f(int)"<<endl;
}
};
class Derived : private Base {
public:
using Base::f;
void f(int n){
cout<<"Derived::f(int)"<<endl;
}
};
int main()
{
Base b;
Derived d;
d.f();
d.f(1);
return 0;
}
O código completo está em: using_derived.cpp
Substituindo o typedef¶
Em C, é comum usar a sintaxe typedef A B, que define B como o tipo A, ou seja, dá ao tipo A o alias B.
Correspondendo a typedef A B, usar using B=A realiza a mesma operação.
O código completo está em: using_typedef.cppTópicos relacionados¶
- Funções virtuais puras e classes abstratas em C++ | C++那些事
- Asserções com assert em C++ | C++那些事
- Bit fields em C++ | C++那些事
- Implementando polimorfismo de C++ em linguagem C | C++那些事
- Constantes e modificadores com const em C++ | C++那些事
- A família completa do const em C++ | C++那些事
- O operador de desreferência * em C++ | C++那些事
- Inicialização e atribuição em C++ | C++那些事
- Formas de retornar múltiplos valores em C++ | C++那些事
- A palavra-chave mutable em C++ | C++那些事