`

c++的类中typedef的作用

 
阅读更多
转自
http://blog.chinaunix.net/uid-28458801-id-4043766.html


    typedef long INDEX 给long这样的类型起别名,它有两个用处:一是表明该类型的特殊作用,二是将来有可能要改变这种类型(比如提高精度),
但是现在了解到可以在class类里面使用(并且还有public,private之分哦) C++引入“仅在类内部起作用的类型别名”的初衷应该不难理解:通过限制该类型别名的作用域来防止冲突。在函数体内部typedef,这个别名在函数体以外不可以使用,也就是说,“类型别名”和变量、函数一样具有作用域。
    c中有了#define 为什么还要typedef就是为了增强安全和健壮性
    随便记录下c中的常量(#define pi = 3.14)和c++中的常量(const double pi = 3.14),前者只是简单的替换,后者还要经过一系列的编译器的安全检查的, 这也是增加了安全性
我也试了试 #define 是否可以再class类里面使用, 结果是可以的, 但是#define是没有作用域的, 也没有什么public, private之分的, 就相当于一个全局的变量, 什么都可以使用

class MyClass
{
public:
  typedef long INDEX;
...
};

  如果该语句放在public段中,则可以在类外部使用,比如:
MyClass::INDEX usercode;//声明一个变量
  而如果放在private段中,则只能在类内使用。
  以往我也经常用typedef,但是从来没有在类里面用过。今天算是学了一招了。C++引入“仅在类内部起作用的类型别名”的初衷应该不难理解:通过限制该类型别名的作用域来防止冲突。比如同样表示长度,可能有的类中只须char即可,有的类中要用int,而有的类可能连long都嫌小。那么,我一概起个别名叫“size”,不同的类中有不同的定义。于是,下面的声明语句就足以避免冲突而且易于理解:
MyClass::size MyClass::GetSize() const;
  进而,我试验了一下在函数体内部typedef,果然这个别名在函数体以外不可以使用,也就是说,“类型别名”和变量、函数一样具有作用域。
  至此,我们可以回过来考虑一下,为什么C++有了“#define”还要“typedef”。过去我始终没有细想过这个原因。原来这样做是为了安全性与健壮性。
  这里,我联想到了const,C语言中没有常量这个概念,如果要用常量,就用“#define pi 3.14”这种形式,但是C++有了“const double pi = 3.14;”虽说继续用前者一样可以写出程序,但这等于放弃了编译器的安全检查。
  “#define”产生的效果在编译之前就起作用了,所有的pi都被替换成了3.14这样一个“立即数”,立即数是没有类型的,于是,在程序编写过程中不可能给予合适的提醒,在程序的编译中也可能产生意想不到的副作用。const将常量作为有类型的数据进行有效管理,既提供了常量的优点,也给予了足够的安全性。而且,const常量是有作用域的,在程序的不同位置可以给予不同精度的pi。

    我们可以参看一下SGI STL中 Vectory的定义就会明白了
template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
class vector : protected _Vector_base<_Tp, _Alloc> 
{
  // requirements:

  __STL_CLASS_REQUIRES(_Tp, _Assignable);

private:
  typedef _Vector_base<_Tp, _Alloc> _Base;
public:
  typedef _Tp value_type;
  typedef value_type* pointer;
  typedef const value_type* const_pointer;
  typedef value_type* iterator;
  typedef const value_type* const_iterator;
  typedef value_type& reference;
  typedef const value_type& const_reference;
  typedef size_t size_type;
  typedef ptrdiff_t difference_type;
   .......
分享到:
评论

相关推荐

    C_C++中typedef_struct和struct的用法

    C_C++中typedef_struct和struct的用法 在 C/C++ 中,struct 和 typedef struct 是两个常用的数据类型定义方式,它们之间有着微妙的区别。本文将详细介绍 struct 和 typedef struct 的用法,并通过实例代码演示其...

    c++笔记struct和typedef struct彻底明白了

    在 C++ 编程语言中,struct 和 typedef struct 是两个非常重要的概念。今天,我们将深入探讨这两个概念的区别和使用方法。 首先,让我们从基本概念开始。struct 是一种用户定义的数据类型,它可以包含多个变量,...

    C/C++语法知识:typedef struct 用法详解

    在 C/C++ 语言中,typedef struct 是一个非常重要的概念,它可以帮助我们定义新的数据类型,简化代码,并提高代码的可读性。在本文中,我们将详细解释 typedef struct 的用法和原理,并讨论它与 struct 的区别。 1....

    C语言调用C++类中的方法

    有时,我们可能需要在C语言项目中调用C++编写的类和方法,这种情况在跨语言交互或维护既有C代码库时尤为常见。本教程将详细讲解如何实现这一目标。 首先,为了使C语言能够调用C++的方法,我们需要确保C++类具备...

    C++_typedef用法详解.pdf

    ### C++中的`typedef`用法详解 #### 一、`typedef`简介 在C++编程语言中,`typedef`是一种非常实用的功能,它允许程序员为现有的数据类型定义新的名称,这种特性对于提高代码的可读性和维护性非常重要。通过使用`...

    typedef用法小结

    typedef 是 C++ 编程语言中的一种语句,用于声明一个别名,typedef 后面的语法是一个声明。然而,许多人对 typedef 的理解存在误解,主要是由于教材的错误介绍和对 typedef 的误解所导致的。 首先,我们需要理解 ...

    C++_typedef_疑难定义收集整理

    至今已遇到两个typedef诡异的定义,因此决定下笔记之,以备后用。

    关于C/C++中typedef的定义与用法总结

    在C和C++编程中,`typedef`是一个非常实用的关键字,它允许程序员为已存在的类型创建一个新的名字或别名。这在编写大型程序或跨平台项目时特别有用,因为它可以使代码更加清晰、简洁,并提高可读性。下面将详细讨论`...

    c++typedef 应用

    在C++编程语言中,`typedef`关键字被广泛用于创建新的类型名,使得代码更加清晰易读,并且有助于减少输入错误。通过`typedef`,程序员可以为现有的数据类型或者复杂的数据结构定义一个别名,这在处理具有长名字或...

    C++中typedef 及其与struct的结合使用

    在C++编程语言中,`typedef` 是一个非常有用的工具,它允许我们为现有的类型创建新的别名。这个功能在编写代码时可以提高可读性和灵活性。`struct` 关键字用于定义自定义数据结构,通常包含一组相关数据的成员。当`...

    C/C++中的typedef和#define详解

    C/C++中的typedef和#define 前言:  在C/C++中,我们平时写程序可能经常会用到typedef关键字和#define宏定义命令,在某些情况下使用它们会达到相同的效果,但是它们是有实质性的区别,一个是C/C++的关键字,一个是C...

    C++类的总结

    在C++中,**类**是面向对象编程的基础,它为数据和函数提供了一个封装的机制。通过定义类,可以创建具有相似特性和行为的对象。类能够帮助我们组织代码、提高代码复用性以及实现数据隐藏。 #### 类的基本结构 一个...

    理解复杂的CC++声明 const, typedef , 函数指针

    在本文中,我们将详细介绍复杂的C/C++声明,包括const、typedef、函数指针等。 一、变量声明 在C/C++中,变量声明是使用关键字int、char、float等定义变量的类型。例如:int n;,这里declare n as an int,n是一个...

    C++ / C 语言中typedef用法实例

    typedef的用法

    每天学点C++(C++实例教程:教程+源码)Typedef.zip

    Typedef是C++中的一个关键字,用于为已存在的类型创建一个新的名字,这被称为类型别名。它使得代码更具可读性,特别是在处理复杂类型时,例如模板或指针。例如,你可能经常看到这样的代码: ```cpp typedef int ...

    c++ typedef用法

    c++ typedef用法

    typedef的用法

    在C语言中,`typedef` 是一个非常重要的关键字,它允许我们为已存在的类型创建新的别名,使得代码更具可读性和可维护性。本文将深入探讨`typedef`的使用方法,以及它如何与函数指针相结合。 首先,`typedef`的基本...

    C及C++中typedef的简单使用介绍

    又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也看了不少关于typedef用法的博客。于是我就想把我理解的东西...

Global site tag (gtag.js) - Google Analytics