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()是乐意修改成员变量的值的,关于二者的区别可见笔记本

原文地址:https://www.cnblogs.com/Con-Tch-LLYF/p/6534010.html