设为首页 加入收藏

TOP

C++基础总结(五)
2013-12-12 14:45:59 来源: 作者: 【 】 浏览:575
Tags:基础 总结

 

  27、不要忘记给静态成员变量赋初值。不像java,变量可以直接在类中声明处赋值,c++中的变量赋值不能在类中声明处赋初值

  #include<iostream>

  class Parent

  {

  public:

  Parent(){}

  Parent(int value){this->value=value;}

  ~Parent(){}

  Parent(Parent&){}

  int value;

  static int num;

  };

  int Parent::num=0;

  28、要将私有成员或函数暴露给另一个类,必须将其声明为友元类,友元关系不能传递,不能继承,也不可交换,将Class1声明为Class2的友元并不能让Class2成为Class1的友元。有时候不想将友元访问权限赋予整个类,为此,可以将成员函数而不是整个类声明为友元。

  友元函数:友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数

  #include<iostream>

  class Parent

  {

  public:

  Parent(){}

  Parent(int value){this->value=value;}

  ~Parent(){}

  Parent(Parent&){}

  friend void getValue(Parent& p);

  private:

  int value;

  };

  void getValue(Parent& p)//不需要加Parent::,因为友元函数不属于该类

  {

  std::cout《 p.value《std::endl;

  }

  void main()

  {

  Parent p(2);

  getValue(p);//友元函数不属于类,直接调用,无需对象表示

  }

  友元类:一个类能够作另一个类的友元。当一个类作为另一个类的友元时,这就意味着这个类的任何成员函数都是另一个类的友元函数。

  以下语句说明类B是类A的友元类:

  #include<iostream>

  class A

  {

  public:

  A(){}

  A(int value){this->value=value;}

  ~A(){}

  A(A&){}

  friend class B;

  private:

  int value;

  };

  class B

  {

  public:

  B(){}

  ~B(){}

  B(B&){}

  void getValue(A& a)

  {

  std::cout《a.value《std::endl;

  }

  };

  void main()

  {

  A a(2);

  B b;

  b.getValue(a);

  }

  经过以上说明后,类B的所有成员函数都是类A的友元函数,能存取类A的私有成员和保护成员。

  29、函数指针

  可以声明指向函数的指针,其实函数名就是指向函数的常量指针,就像数组名是指向数组第一个元素的常量指针一样。

  #include<iostream>

  void add(int a, int b)

  {

  std::cout《 a+b 《std::endl;

  }

  void subtract(int a, int b)

  {

  std::cout《 a-b 《std::endl;

  }

  void main()

  {

  void (*pFunc) (int, int);

  pFunc=add;//给函数指针赋值,使其指向add函数

  pFunc(2,1);//赋值之后调用

  pFunc=subtract;

  pFunc(2,1);

  }

  30、将函数指针作为参数传递

  #include<iostream>

  void add(int a, int b)

  {

  std::cout《 a+b 《std::endl;

  }

  void subtract(int a, int b)

  {

  std::cout《 a-b 《std::endl;

  }

  void printValue(void (*func)(int, int) , int a, int b)//函数指针作为参数

  {

  func(a,b);

  }

  void main()

  {

  void (*pFunc) (int, int);//函数指针声明

  pFunc=add;//函数指针赋值

  printValue(pFunc,2,1);//函数指针作为参数传递

  pFunc=subtract;

  printValue(pFunc,2,1);

  }

  31、空指针常量:使用指针时候一定要给它赋值,未初始化的指针可能指向内存的任何位置,这就做野指针。为了避免这种威胁,创建时候应该将空值(0或者NULL)赋给指针。但这会在函数重载的时候造成一定麻烦,比如一个接收字符型指针或整数作为参数:

  void func(char *);

  void func(int);

  若调用时候传递一个空指针,则调用void func(int),这不符合设计人员本意。

  32、函数模板

  #include<iostream>

  template<class T>

  void swap(T& a, T& b)

  {

  T tmp;

  tmp=a;

  a=b;

  b=tmp;

  }

  void main()

  {

  int a=1,b=2;

  swap(a,b);

  std::cout《"a="《a《", b="《b《std::endl;

  }

  33、类模板

  #include<iostream>

  template<class T>

  class A

  {

  public:

  A(T value)

  {

  this->value=value;

  }

  T getValue()

  {

  return value;

  }

  private:

  T value;

  };

  void main()

  {

  A<int> a(2);

  std::cout《a.getValue()《std::endl;

  }

        

首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇获取电脑和平板物理地址 下一篇c++流状态的查询和控制

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)