在另一堂课中带有类Typedef
Typedef With A Class In Another Class
class A{
public:
A(){ letter = 66; }
void display(void){ cout << "A = " << letter; }
private:
int letter;
};
class B{
public:
typedef A classA;
};
int main(void){
B::classA objA;
objA.display();
return 0;
}
此代码运行正常;但是,我无法理解我们在此代码中所做的工作。我以前从未见过这样的事情。似乎A类是B类的成员。如果是这样,为什么我们不通过B类的对象使用Classa?
似乎A类是B类的成员
否。您拥有的是 name (在这种情况下是一种类型(,在class B
中声明为classA
,它是类的类型,A
。在C 中,类的名称也是一个名称空间。因此,Typedef,让您访问class B
中的名称classA
。
我以前从未见过这样的东西。
在您的特定示例中,这可能是过度的。但是拥有类型的别名非常有用,您会发现很多类模板代码。
考虑:
template<typename T>
class B{
public:
typedef T classA;
};
没有上面的typedef
,很难分辨出上述类型的类型。
一个典型的示例是STL算法如何通过通过std::iterator_traits
iterator_category
来告诉给定迭代器的类别类定义class B { typedef A classA; }
不能在类B
中定义任何数据成员;使用typedef
,它引入了一个新名称classA
作为类型class A
的同义词(。因为此Typedef名称是在class B
中定义的,所以它在B
类的名称空间中,因此您需要将此新类型称为B::classA
,然后将其等同于A
。例如,C 标准:
7.1.3 typedef指定
(1(包含dect-secifier typedef的声明声明声明标识符,以后可用于命名。... 因此,Typedef名称是另一种类型的同义词。 ...
btw:引入别名的一种常见方法也是 using
-陈述:
using classA = A;
(2(typedef-name也可以通过别名 - 陈述引入。这 遵循使用关键字的标识符变为typedef-name,并且 遵循标识符的可选属性特定符号 对于这个Typedef-name。它具有相同的语义 由Typedef规范介绍。特别是,它没有定义 一种新类型,它不得出现在类型ID中。
- C++:TypeDef使用元组
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 为什么在使用typedef时类推导指南会失败
- 尝试根据类中 typedef 的存在来专门化模板函数
- 如何重新定义MPI_FLOAT,MPI_DOUBLE以 typedef 的方式
- typedef 枚举和枚举类有什么区别?
- 在类模板中使用 typedef 时出错
- 模板类中的 typedef 语句
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- 向前声明指向类的 typedef 指针
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 如何创建 typedef 结构的前向声明
- 从 Typedef 数据类型中删除常量
- typedef vector size_type in header file
- typedef 别名的析构函数
- 如何使用 typedef 创建多个数组?
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- 模板类编译问题与 typedef 变量