一、类中静态成员
1、类中的静态数据成员,所有对象都共享这一个成员,这个静态数据成员只有一份存在于内存中
2、类中的静态函数成员,因为他不属于对象,所以在这个函数中只能操作类的静态数据,静态函数
3、类中的静态数据成员,不管共有私有都是在类外进行初始化
4、类中静态数据成员初始化,静态数据成员不属于对象,无法通过对象的操作进行初始化,它是属于类的
5、静态数据成员,可以被重新赋值,可以被普通函数访问
class A
{
public:
int a;
static int
m;//类中的静态数据成员,所有的对象都共享这一个成员,这个静态数据成员只有一份存在于内存中
public:
A()
{
m++;
//m
= 123;不能再类内初始化 必须再类外初始化 类型
类名::静态成员=初始化值
}
~A()
{
m--;
}
void setM(int i){ m = i;
}//但是可以被重新赋值
int getM(){ return m; }//类中的静态数据成员可以被普通函数访问
static int
fun()//静态成员函数也不属于任何对象,只属于类
{
//a +=
10;因为它不属于对象,所以在这个函数中只能操作类的静态数据和静态函数
m += 10;
int
a=12;
a++;
cout << m << endl;
return
m;
}
};
int A::m = 0;
二、类中常量成员
1、类中常量成员分为两种:常量数据成员和常量函数成员
2、类中的常量数据成员,必须要使用初始化列表的方式进行初始化 <const int a;>
3、类中的常量函数成员,这个函数不能对自身变量进行修改,这个是常量的特性 <void fun() const {}>
Ⅰ、受语法限定,只要是this指针所指向的所有数据,在这个函数里面都不可以改
Ⅱ、初始化之外的形参数据,临时变量,不属于this指针的数据都可以改
Ⅲ、根据语法,可以帮助我们来限定去修改自身的数据
4、对象被说明说常量对象时,这个对象只能调用常量数据成员函数
Ⅰ、这个对象里面的所有数据都是不可以被修改的
Ⅱ、可以对象里面的静态成员,因为静态成员不属于对象
class A
{
public:
int a;
const char
sex;//类中常量数据成员
static int b;
A(char s) :sex(s)
{
a=666;
}
//const
写在前面不合适,是修饰返回值
void fun1()const//类得常量函数成员,const必须写再函数的后面
{
//a +=
10;不能对自身变量进行修改,这个是常量的特性
//受语法限定,只要是this指针所指向的所有数据,在这个函数里面都不可以改
//初始之外的形参数据,临时变量,不属于this指针指的数据,都可以改
int
n =
10;
n++;
}//只读操作
////1、根据语法可以帮助我们来限定在函数去修改自身的数据
////2、当对象被说明为常量对象时,只能够调用常量成员函数
static
void fun2(int a)
{
a = 12;
}
void fun3()
{
}
};
int A::b = 0;
三、类中的友元成员
1、类的特点是封装,友元是C++为用户提供打破这中封装(数据隐藏)的手段
2、友元分为两种:友元函数,友元类
3、友元函数:是一个函数,这个函数不是对象的成员,对象是点不出来的,不管在哪里定义,但是这个函数有权调用类的所有的私有成员以及保护成员 声明一个友元函数:把函数的声明写在类中,无论私有共有保护,然后在前面加上一个friend即可
4、友元成员:类B为类A的友元类
B类和A类是两个类,友元类B必须在雷伟说明,B类所有成员函数都有权访问A类的所有成员
5、友元的三个特点
Ⅰ、单方向:B是A的朋友,B可以访问A的数据,A不可以访问B的数据
Ⅱ、不传递:A是B的朋友,B是C的朋友,A和C没有朋友关系
Ⅲ、不继承:A是B的朋友,B是C的父亲,A和C没有关系
class B;//声明类
class A
{
int a;
public:
friend class
B;
friend void fun(A *srca);//友元函数的声明,这个函数不属于类
int
geta()
{
return a;
}
};
class B
{
public:
void
fun(A&a)
{
a.a = 123;
}
};
void fun(A
&srca)
{
srca.a = 10;
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!