类成员:
空类大小:
一个空类即使没有任何数据存储其大小也不能为
0
,空类实例占用的大小为
1
,用来在内存中占位
创建多个对象,对象成员属性的地址不同
属于对象的成员属性,在定义对象时才会存在
int
a
=
10
;
int
&
b
=
a
;
//
初始化引用
b
=
20
;
cout
<<
a
<<
endl
;
//20;
int
aa
=
1
;
b
=
aa
;
//
赋值操作
this
指针:
由编译器默认添加到类中的非静态成员函数
作用:指向了调用该函数的对象,在函数中使用其他成员都是通过
this
指针间接使用的
类型是
CTest * const this
this
指针既是指针变量,也是关键字
静态成员:
静态成员属性
:
特点:
属于类的,不参与对象的空间占用,在编译期就存在
需要在类外进行初始化,省略
static
关键字
可直接类名作用域去调用,也可以调用对象去调用
class CTest {
public:
int m_a;
static int m_b;
};
int CTest::m_b=10;
静态成员函数:
属于类的,编译期存在,一个类中存在一份,被多个对象所共享,存在与否与是否定义对象无关
在没有对象的情况下,仍然可以使用静态成员函数
如果存在对象,也可以通过对象去使用
注意:静态成员函数不能使用一般的成员函数
一般的成员函数和静态成员函数的区别:
1.
静态成员函数 没有隐藏的
this
指针参数,一般的成员函数有。
2.
静态成员函数 只能使用静态的成员,一般的成员函数都可以使用。
3.
静态成员函数 是否通过对象调用都可以,一般的成员函数必须通过对象调用。
const
常量,常函数和常量对象
常量:
带有
const
的变量在定义的时候必须要初始化,且初始化是在初始化参数列表中完成的,不能在函数体内
部进行赋值操作
class
CTest
{
public
:
int
m_a
;
static
int
m_b
;
};
int
CTest::m_b
=
10
;
常函数特性:不能修改类中的非静态成员
常量指针升级降级
int *p3=&a;
const int *p4=p3;//指针的安全级别升级
常函数不能调用普通的类成员函数(指针降级)
普通的类成员函数可以调用常函数、
常函数能调用静态成员函数,但是静态成员函数不能调用普通成员函数以及常函数