一、静态成员变量和静态成员函数
1、静态成员变量
特征:所有对象共享一个静态成员变量
注:1、静态成员变量一定要在类的外部初始化(静态成员变量需要存放在共有变量中)
2、静态成员变量可以通过类名来访问
#include <iostream>
using namespace std;
class Student
{
private:
int id;
public:
Student()
{
count++;
id = count;
}
static int count; //静态成员
~Student()
{
count = 0;
}
void getCount()
{
cout << count << endl;
}
};
//注:静态成员变量一定要在类的外部初始化
int Student::count = 0;
int main()
{
Student s1;
Student s2;
cout << Student::count << endl; //静态成员变量可以通过类名来访问
//s1.getCount();
return 0;
}
2、静态成员函数
特征:静态成员函数内部只能访问静态成员变量,不能访问普通变量
格式:static void xxx()
二、面向对象模型
1、对象占用内存大小
一个对象所占内存的大小:相当于成员变量的大小(不包含静态成员变量)
2、C++中类的普通成员函数都隐式包含一个指向当前对象的this指针
当成员函数中某个变量与成员变量名字相同,则使用this关键字来表示成员变量
void show() //等价于void show(Test *this)
隐藏的this指针 所有的成员函数隐藏了一个参数 this指针
3、const修饰成员函数
作用:常函数只能访问变量,不能修改变量
const修饰函数 放在后面 常函数
#include <iostream>
using namespace std;
class Test
{
private:
int a;
int b;
public:
Test()
{
a = 0;
b = 1;
}
void show() const //const修饰函数 放在后面 常函数
{
//a++;
cout << a << " " << b << endl;
}
};
int main()
{
Test t1;
t1.show();
return 0;
}
4、全局函数与成员函数
方法:把成员函数改为全局函数,需要添加一个参数
22 void show(Test &t) //把成员函数改为全局函数,需要添加一个参数
23 {
24 //cout << a << endl; //a是成员变量 通过对象来访问
25 cout << t.a << endl;
26 }
5、有元函数(全局函数调用类的私有量)
概念:friend void show(Test &t); //在类中声明有元函数,可以访问类对象的私有变量
6、有元类
#include <iostream>
using namespace std;
class A
{
friend class B; //有元类,可以在类B中访问类A的私有成员变量
private:
int a;
};
class B
{
public:
void print(A &ta)
{
cout << ta.a << endl;
}
};
int main()
{
return 0;
}