C++ 特殊工具与技术

来源:互联网 发布:新浪微博淘宝版入口 编辑:程序博客网 时间:2024/06/06 04:36

1、allocator类:allocator类是C++的一个模板,它提供类型化的内存分配以及对象的分配和撤销。

 Item_base *pItem = new Item_base();
 allocator<Item_base> a;
 a.allocate(100);

2、RTTI:程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。

 Item_base *bp = new Item_base();
 Bulk_item *dp2 = dynamic_cast<Bulk_item*>(bp);

 if(typeid(Bulk_item) == typeid(*dp)) cout << "Bulk_item 类型" << endl;
 cout << typeid(*bp).name() << endl;

3、类成员的指针:可以定义一个指针,使其指向类成员或成员函数,然后通过指针来访问类的成员。这包括指向属性成员的指针和指向成员函数的指针。

 std::string Item_base::* p = &Item_base::isbn;
 double(Item_base::* pmf)(std::size_t) const = &Item_base::net_price;

4、嵌套类:在一个类的内部定义另一个类,我们称之为嵌套类(nested class),或者嵌套类型。

5、union:“联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目的。

union TokenValue
{
 char cval;
 int ival;
 double dval;
};

union StateMachine {
public:
char character;
int number;
char *str;
StateMachine(char c) {
character = c;
}
StateMachine(int n) {
number = n;
}
StateMachine(char* s) {
str = s;
}
};
enum State {character, number, str};
int main() {
State state = character;
StateMachine machine('J');
...
if(state == character)
cout << machine.character << endl;
...
return 0;
}

6、局部类:可以在函数体内部定义类,这样的类称为局部类。一个局部类定义了一个类型,该类型只在定义它的局部作用域中可见。

double net_price(size_t n) const
 {
  class Cat
  {

  };

  Cat cat;

  return n * price;
 }

7、位域:位域是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。

class File {
public:
 Bit mode: 2;
 Bit modified: 1;
 Bit prot_owner: 3;
 Bit prot_group: 3;
 Bit prot_world: 3;
 //..
};

 File myFile;
 myFile.mode = WRITE;
 myFile.modified = 1;

8、volatile:

作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

9、extern "C":

extern "C"的作用是,告诉C++编译器,下面的代码按照C的方式进行编译

extern "C" void show(char *);

0 0
原创粉丝点击