zoukankan      html  css  js  c++  java
  • C++学习笔记(4)

    一.   类和对象

    1.对象和对象指针:

    Time time, *T;

       T = &time;

       time.n = 12;

       time.show();

       T->n = 11; //注意不能使用time->show()的形式,也不能用T.show();

       T->show();

     还可以通过new实现实例化

    Pen *pen = new Pen();

    1. 对象数组

    Time time[10];

    time[0].n = 0; //也可以(time+0)->n = 0;

    1. 类中的内联函数

    (1)  隐式内联函数:函数体在类中的函数(不需要inline)

    (2)  显示内联函数:在类中声明,在类外定义,但是类中的声明,而且声明时要inline

    1. 构造函数:可以重载,而且可以有多个;只要声明一个对象就调用一次构造函数;可以传参,注意使用参数初始化表:如Pen(int size):m_size(size){}
    2. 相同类型的结构体对象可以直接赋值,如Student stu1,stu2;stu1 = stu2
    3. 析构函数:只能有一个;如果对象是在栈中被创建的,则在对象失去作用域时,系统自动调用析构函数来释放对象占用的内存

    8.虚函数:解决基类对象指针无法调用子类函数情况(如果在基类中声明成员函数为虚函数,再将派生类的对象传递给基类指针,通过这个基类指针就可以调用派生类中的的虚函数);

    class A

    {

    public:

       void Fun()

       {

          cout << "It is A" << endl;

       }

    };

    class B:public A

    {

    public:

       void Fun()

       {

          cout << "This is B" << endl;

       }

    };

    int main()

    {

       A *a1, a2;

       a1 = &a2;

       a1->Fun();

       B b;

       a1 = &b;

       a1->Fun();

       return 0;

    }

    上面这个程序就输出两个 It is A

    而将A中的Fun()声明为   virtual void Fun(),就可以输出This is B

    纯虚函数:含有纯虚拟函数的类称为抽象类,它不能生成对象,格式:virtual void Fun() = 0;(virtual 函数类型 函数名称(参数列表)== 0;)

    在一个类中声明纯虚函数,而在派生类中没有重新对该函数进行定义,在纯虚函数在派生类中依然为纯虚函数

    1. 内联函数:(inline)对于在类中定义的函数比较小的情况下,可以将类中的成员函数定义为内联函数,减少系统的调用时间
    2. 静态成员:(静态数据和静态函数)属于整个类共有

    (1)  静态数据只能在函数外部单独初始化,而且也不能在构造函数中初始化,(但是也可以通过函数和对象改变静态变量的值)如

    class A

    {

    public:

       static int a;

       A();

    };

    A::A()

    {

       //a = 0; //会报错

    }

    int A::a = 0; //格式为:数据类型 类名::静态数据变量 == 初始值

    (2)  静态成员不依赖与对象存在,在程序编译时分配空间,在程序结束时释放空间,故即使不定义对象,也可以为静态成员变量分配空间,进而可以使用该静态成员

    class A

    {

    public:

       static int a;

    };

    int A::a = 0; 

    int main()

    {

       cout << A::a << endl;

    }

    (3)  静态函数与普通函数的区别:普通成员函数在参数传递时编译器会隐藏一个this指针,来确定调用类产生的哪个对象,但是静态成员函数没有this指针,不知道应该访问哪个对象中的数据,所以不可以用静态成员函数来访问普通变量,只能访问静态成员变量

    1. 友元:可以将一个普通函数或者类申明为一个类的友元,则该函数或者改类中的函数就可以访问该类中的数据了

    friend  B;//但是必须在前面申明B类哈

       friend void Input();

       friend void Input(A &aa,int x); //注意要想通过友元函数改变类中数据必须是对对象的引用才行哈

    1. const:常成员变量,值不可改变,不能再构造函数的定义中为常成员变量赋值,但是可以使用参数初始化表对const成员变量进行初始化

    const int a;

       A(int x = 1) :a(x)

       {

       }

    10. 常成员函数:只能引用本类中的成员变量而不能修改成员变量  

    void Output()const //注意不是const void Output()哈,const void Output()并非常成员函数哈,而且const void Output()是乐意修改成员变量的值的,关于二者的区别可见笔记本

  • 相关阅读:
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    PHP serialize() 函数
    PHP print_r() 函数
  • 原文地址:https://www.cnblogs.com/Con-Tch-LLYF/p/6534010.html
Copyright © 2011-2022 走看看