विषय पर बढ़ें

अंतिम अद्यतन:2026-10-12

C++ using declaration और alias

लेखक के बारे में:

व्यक्तिगत WeChat सार्वजनिक अकाउंट:

wechat

बुनियादी उपयोग

local और global using,विस्तृत operations और उपयोग नीचे दिए उदाहरण में देखें:

#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;
}
पूरा कोड देखें: using_global.cpp

accessibility बदलना

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;
};

Derived क्लास ने Base को privately inherit किया है, इसके लिए मेंबर वेरिएबल n और मेंबर फ़ंक्शन size private हैं, अगर using statement का उपयोग करें, तो इनकी accessibility बदली जा सकती है, जैसे उपरोक्त उदाहरण में size को public permission से एक्सेस किया जा सकता है, और n को protected permission से। पूरा कोड देखें: derived_base.cpp

फ़ंक्शन overloading

inheritance के दौरान derived क्लास overloaded फ़ंक्शन के 0 या अधिक इंस्टेंस को override कर सकती है, एक बार कोई overload वर्ज़न परिभाषित करते ही बाकी overload वर्ज़न invisible हो जाते हैं।

अगर बेस क्लास के overloaded फ़ंक्शन में से हमें derived क्लास में एक को बदलना हो और बाकी को visible रखना हो, तो सभी वर्ज़न overload करने पड़ेंगे, जो बहुत कष्टप्रद है।

#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;
}
उपरोक्त कोड में, derived क्लास में using declaration statement से केवल एक नाम निर्दिष्ट किया गया है, parameter list नहीं, इसलिए बेस क्लास मेंबर फ़ंक्शन की एक using declaration statement उस फ़ंक्शन के सभी overload इंस्टेंस को derived क्लास के स्कोप में जोड़ देती है। इस स्थिति में derived क्लास को केवल अपने खास फ़ंक्शन परिभाषित करने होते हैं, inherit हुए दूसरे फ़ंक्शन दोबारा परिभाषित करने की ज़रूरत नहीं।

पूरा कोड देखें: using_derived.cpp

typedef की जगह

C में अक्सर typedef A B जैसा syntax उपयोग होता है, जिससे B को A टाइप परिभाषित किया जाता है, यानी A टाइप को alias B देना।

typedef A B के संगत, using B=A का उपयोग करके वही काम किया जा सकता है।

typedef vector<int> V1; 
using V2 = vector<int>;
पूरा कोड देखें: using_typedef.cpp

संबंधित विषय

टिप्पणियाँ