首页 > 代码库 > C++ 学习总结 复习篇

C++ 学习总结 复习篇

?

  1. 友元的使用

    分为友元类和友元函数

  2. // BlankTest.cpp : 定义控制台应用程序的入口点。
  3. //
  4. //友元类与友元函数的共同点:都可以让某一个类作为另一个类或者函数的参数。
  5. ?
  6. //友元类:它让当前类成为另一个类的友元,然后,另一个类可以访问当前类的私有成员。
  7. #include "stdafx.h"
  8. #include <iostream>
  9. using namespace std;
  10. ?
  11. class myclass
  12. {
  13. ???int m;
  14. ???int n;
  15. public: //若不加public,则编译错误。友元类无法访问私有成员。
  16. ???myclass(int i, int j)
  17. ???{
  18. ??????m = i;
  19. ??????n = j;
  20. ???}
  21. ???friend class test; //友元类的使用
  22. ???//简单点讲就是外部函数的内嵌 可以访问
  23. ???friend int sub(myclass k); //友元函数的使用
  24. };
  25. ?
  26. class test
  27. {
  28. public:
  29. ???void Test(myclass k)
  30. ???{
  31. ??????cout << k.m << " " << k.n << endl;
  32. ???}
  33. };
  34. ?
  35. int sub(myclass k)
  36. {
  37. ???return k.m;
  38. }
  39. ?
  40. int _tmain(int argc, _TCHAR* argv[])
  41. {
  42. ???myclass *p = new myclass(3,6);
  43. ???test *t = new test();
  44. ???t->Test(*p);
  45. ???cout << sub(*p) <<endl;
  46. ???return 0;
  47. }

    ?

    突然想到static 、 const 、 static const 以及它们的初始化

    Const 定义的常量超出其作用域会被释放掉,而static 定义的静态常量在函数直线后不会释放其存储空间。

    对于各自的初始化规则如下:

    1. const定义的常量,需要在初始化列表中初始化。
    2. static定义的静态变量,需要在类的外部初始化。
    3. const static 与 static const 一样,它也是需要在类的外部初始化。
    4. const 形式的方法 其主要作用是为了防止成员函数修改成员变量的值。作用域为某个对象,不同的对象可以有不同的const定义的常量的值。
    5. static形式的方法 其主要作用是为了作为全局方法使用。作用域为整个类。一般作为工具类使用,不同的对象可以修改static静态变量的值,

      而无法修改const static 静态常量的值。

    ?

    注意:要想在类中建立恒定不变的值,除了用const static外,还可以用enum 枚举实现。

    ?

    举例如下:

    // BlankTest.cpp : 定义控制台应用程序的入口点。

    //

    // const 、 static 、 const static 、 enum 之间的区别与联系

    #include "stdafx.h"

    #include <iostream>

    using namespace std;

    ?

    class myclass

    {

    ????const int m;

    public:????static int n;

    ????const static int mn;

    ????enum

    ????{

    ????????size1 = 50, //枚举变量中没有 ;冒号,只有 , 逗号。

    ????????size2 = 60

    ????};

    public: //若不加public,则编译错误。友元类无法访问私有成员。

    ????static void print();

    ????const void print2();

    ?

    myclass(int a);

    };

    ?

    int myclass::n = 10; //静态成员的定义+初始化

    const int myclass::mn = 20;

    ?

    myclass::myclass(int a):m(a) //用a 来初始化const成员,此处可以直接写一个 数字,比如10,都是没有问题的。

    {

    ????n += 1;//说明 我们在构造函数里面可以对static变量进行更改

    }

    ?

    ?

    void myclass::print()

    {

    ????cout << "count= " << mn << endl;

    }

    ?

    const void myclass::print2()

    {

    ????//m = 20; //错误,错误提示:表达式必须是可修改的左值。

    ????cout << "const = " << m << endl;

    ????cout << "static = " << n << endl;

    }

    int _tmain(int argc, _TCHAR* argv[])

    {

    ????myclass a(10);

    ????a.print();//通过对象访问静态成员函数

    ????myclass::print();//通过类访问静态成员函数

    ?

    ????a.print2();

    ????a.n += 1; //static 变量是可以更改的。而static const 变量是不可更改的。

    ????a.print2();

    ?

    ????cout <<"enum = "<< a.size1 << endl;

    ????//a.mn += 1;//error,静态常量无法修改左值。

    ????return 0;

    }

C++ 学习总结 复习篇