C++可直接 类名:: (作用域符)访问的成员及用typename区分AA::BB形式

本文介绍了C++中类的静态数据成员、静态成员函数的访问方式,以及类型别名的使用,强调了静态成员的类关联性。还讨论了静态数据成员的静态生存周期和`typename`关键字的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.静态成员

2.类型别名

3. 枚举类型及其成员:

4.嵌套类/结构体/联合体:

5.生存周期

6.typedef typename作用

        在C++中,类的公有静态数据成员、静态成员函数、类型别名、枚举类型及其成员(枚举常量)、嵌套类/结构体/联合体等可以通过类名加作用域解析运算符(::)来直接访问。对于非静态的公有数据成员和成员函数,你需要一个类的实例(对象)来访问它们。

1.静态成员

静态成员(无论是数据成员还是成员函数)是与类本身相关联的,而不是与类的特定对象相关联。因此,你可以直接通过类名加::来访问它们,而不需要创建类的实例。

class MyClass { 

public: 

    static int staticMember; // 静态数据成员 
    static void staticFunction(); // 静态成员函数 
	   // ... 其他成员 ... 
}; 


	int MyClass::staticMember = 0; // 定义并初始化静态数据成员

	void MyClass::staticFunction() { 
	        // 静态成员函数的实现 
	} 


int main() { 
	// 直接通过类名访问静态成员 
    MyClass::staticMember = 42; 
    MyClass::staticFunction(); 
    // ... 其他代码 ... 

	return 0; 
}

2.类型别名

类型别名(使用typedefusing定义)是另一种可以直接通过类名加::来访问的公有成员。类型别名在模板编程中尤其有用,因为它们允许你为复杂的类型表达式提供简短的名称。

class MyClass { 
public: 
    typedef int ValueType; // 使用 typedef 定义类型别名 
    using AnotherType = double; // 使用 using 定义类型别名(C++11及以后) 
}; 


int main() { 
// 直接通过类名访问类型别名 
    MyClass::ValueType var1 = 10; 
    MyClass::AnotherType var2 = 20.0; 
    return 0; 
}

3. 枚举类型及其成员

class MyClass {  
public:  
    enum Color { RED, GREEN, BLUE };  
};  
int main() {  
    MyClass::Color color = MyClass::RED; // 访问枚举类型及其成员  
    return 0;  
}

4.嵌套类/结构体/联合体

class MyClass {  
public:  
    struct NestedStruct {  
        int x;  
        float y;  
    };  
};  
int main() {  
    MyClass::NestedStruct ns; // 声明嵌套结构体类型的变量  
    ns.x = 10;  
    ns.y = 3.14f;  
    return 0;  
}

5.生存周期

静态数据成员具有静态生存周期
静态生存周期是指如果对象或者变量从定义的那一刻起,一直到程序的结束才销毁。

而函数和类型别名本身不占用存储空间

类型别名是在其声明的地方定义的,仅仅是一个名称的引用

函数是在程序编译时确定的代码块,它们不是程序运行时的对象(实例),因此没有与对象相关的生命周期概念。

6.typedef typename作用

typedef typename _Alloc_traits::size_type		size_type;

那么问题来了,为什么要加上typename关键字?

直接用typedef  _Alloc_traits::size_type        size_type;   不行吗

实际上,这是因为对于形如AA::BB这样的形式,它有可能是一个类型,也有可能是类的静态成员,这个时候加上typename就是为了告诉编译器,它后面的一大串字符串都是一个类型。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值