C++类中一些常见的成员

注:以下为个人见解,有可能错误,欢迎批评指出!

C++的成员分类:

  • 按照成员在类中扮的角色分:

    数据成员、成员函数。

  • 按照成员自身的使用特性分://特性:特殊性质

    普通成员、静态成员、常量成员、友元、对象成员

下以成员自身使用特性来分别介绍

一、普通成员

   即前面所学,不再做介绍。

二、静态成员

  A.静态数据成员

      定义格式:static 类型 数据成员名表;//数据成员名表即(一个到多个)变量

   说明:

    1. 一般在类中定义为私有成员、保护成员。
    2. 初始化(分配内存空间):应该在程序开始运行时即生成,必须在任何函数在外进行初始化。
      格式:类型 类名::静态数据成员名=初值  //格式类似类外成员函数定义,static 不用管了,不允许使用
    3. 静态数据成员在一个类(类是定义的对象的集合)中只有一个,属于所有对象,为所有对象所共享。
      如:普通数据成员在一个类中可以有多。 ob1.x ob2.x 两个x数据成员(同名)均属于同一类。
    4. static 只是声明用,在类外不允许再用static

   代码:只为说明静态数据成员的定义和初始化

    

1 #include<iostream>
2 using namespace std;
3 class counter
4 {
5     private:
6         static int count;//静态数据成员的定义
7 };
8 int counter::count=100;//静态数据成员的初始化

  B.静态成员函数

      定义格式:在成员函数前加上static即可

   调用方法:

        ①类名::静态成员函数名(实参表);

        ②对象名.静态成员函数名(实参表);

        注:更偏爱①,更能说明静态成员函数属于类而不是属于哪个对象。

   说明:

    1. 静态成员函数只能专门访问静态数据成员。
    2. static 只是声明用,在类外定义静态成员函数时不允许再用static。
    3. 通常用静态成员函数来处理静态数据成员。

   代码:只为说明静态成员函数的定义

 1 #include<iostream>
 2 using namespace std;
 3 class simple
 4 {
 5     private:
 6         static int v1,v2,v3;
 7     public:
 8          static void sum(void)  //静态成员函数的定义  
 9         {
10              v3=v1+v2;
11         }
12 };
13 int simple::v1=0;
14 int simple::v2=0;
15 int simple::v3(0);
 1 #include<iostream>
 2 using namespace std;
 3 class simple
 4 {
 5     private:
 6         static int v1,v2,v3;
 7     public:
 8         static void sum(void);  //静态成员函数在类内的声明
 9 };
10 int simple::v1=0;
11 int simple::v2=0;
12 int simple::v3(0);
13 void simple::sum(void)  //在类外的定义
14 {
15     v3=v1+v2; 
16 }

 三、常量成员

  常量成员(或对象)的关键就在常量二字,一经 定义 确定 ,其值不能更改。

  A.常量成员函数

     定义:与普通成员函数类似,在后加const(即使在类外定义也要加const)

     说明:

   1. 用于处理常量对象

   2. 可凭借const构成重载即使参数完全一样。(注:重载是参数的不同)

  B.常量数据成员(C中学过、不再赘述

   定义:与普通数据成员类似,只需在成员名前加const即可,位置有两个。

  C.常量对象(雾:大概率不是类中成员,在类外定义,除非是容器类)

   定义:与普通对象定义类似,只需在成员名前加const即可,位置有两个。

   1. const Myclass ob;

   2. Myclass const ob; //Myclass 是类名

     说明:

   1. 常量对象定义时初始化后,数据成员的值不能更改。(常量性)

   2. 需要常量函数才可操作常量对象。

四、友元

  A.友元函数

  作用:实现了非该类的函数可以访问该类的私有成员。

  注:访问私有成员:只有该类的函数才可以访问私有成员。

  方法:在类中声明,写上允许访问私有成员的函数,前加friend

  

 1 #include<iostream>
 2 #include<string.h>
 3 using namespace std;
 4 class girl
 5 {
 6     private:
 7         char*name;
 8         int age;
 9     public:
10         girl(char*na,int n)
11         {
12             name=new char[strlen(na)+1];
13             if(name!=NULL)
14             {
15                 strcpy(name,na);
16             }
17             age=n;
18         }
19         ~girl(void)
20         {
21             delete []name;
22         }
23         friend void disp(girl&g); //此处为友元函数的声明
24 } ;

  B.友元类

  作用:实现了非该类的某一类(例如类A)的所有函数可以访问该类的私有成员。

  方法: eg.  friend class A;即为A中的所有成员函数均可以访问该类的私有成员。

 五、容器类(包含对象成员)

  容器类:含对象成员的类称为容器类

  A.容器类的构造函数

  类名(形参表):对象名1(参数表1),……,对象名n(参数表n)

  B.关于容器类的一些说明

   创建容器类时先执行对象成员的构造函数,再执行容器类的构造函数。

   析构时遵循先定义后释放。

  代码

 1 #include<string.h>
 2 #include<hdate.h>
 3 class person
 4 {
 5     private:
 6         char *name;
 7         char sex[2];
 8         Date birthday; //处理数据用已知的类,不必事事都到底层
 9     public:
10         person(*na,*s,int y,int m,int d):birthday(y,m,d) //容器类的构造函数
11         {
12             name=new char[strlen(na)+1];  //在容器类构造函数内部,不必对对象成员初始化(在对象所属类已经初始化)
13             if(name!=NULL)
14             {
15                 strcpy(name,na)
16             }
17             strcpy(sex,s);
18         }
19         ~person(void)
20         {
21             delete []name;
22         }
23         char *get_name(void)
24         {
25             return(name);
26         }
27         char *get_sex(void)
28         {
29             return(sex);
30         }
31         int get_year(void)
32         {
33             return(birthday.get_year());
34         }
35         int get_month(void)
36         {
37             return(birthday.get_month());
38         }
39         int get_day(void)
40         {
41             return(birthday.get_day());
42         }
43         void print(void);
44 }
45 void person::print(void)
46 {
47     cout<<"姓名:"<<name<<endl;
48     cout<<"性别:"<<sex<<endl;
49     cout<<"出生日期:"<<birthday.get_year()<<"";
50     cout<<birthday.get_month()<<"";
51     cout<<birthday.get_day()<<""<<endl;
52 }
View Code

  

  

猜你喜欢

转载自www.cnblogs.com/google-s/p/10809132.html