1-static.cpp
#include <iostream>
using namespace std;
class Student
{
public:
static int count; //静态成员变量 所有对象共享同一个静态成员变量
private:
int id;
public:
Student()
{
count++;
id = count;
}
static int getCount() //静态成员函数
{
//id++; //静态成员函数内部只能访问静态成员变量,不能访问普通变量
return count;
}
};
//注:静态成员变量一定要在类的外部初始化
int Student::count = 0;
int main()
{
Student s1;
Student s2;
cout << Student::count << endl; //静态成员变量可以直接通过类名来访问
cout << s1.getCount() << endl;
cout << Student::getCount() << endl; //静态成员函数可以通过类名直接访问
return 0;
}
2-面向对象模型.cpp
#include <iostream>
using namespace std;
class Test
{
private:
int a;
char b;
public:
Test(int _a)
{
this->a = _a;
}
void show() //等价于void show(Test *this) 所有的成员函数隐藏了一个参数 this指针
{
cout << this->a << endl;
}
};
int main()
{
Test t1(0);
cout << sizeof(t1) << endl; //不包含静态成员变量
Test t2(1);
t1.show(); //等价于 t1.show(&t1);
t2.show(); //等价于 t2.show(&t2);
return 0;
}
3-常函数.cpp
#include <iostream>
using namespace std;
class Test
{
private:
int a;
int b;
public:
Test()
{
a = 0;
b = 1;
}
void show() const //注意位置 常函数
{
//a++; //常函数只能访问变量,不能修改变量
cout << a << " " << b << endl;
}
};
int main()
{
Test t1;
t1.show();
return 0;
}
4-全局函数和成员函数.cpp
#include <iostream>
using namespace std;
class Test
{
friend void show(Test &t); //声明友元函数
private:
int a;
public:
Test()
{
a = 100;
}
void show()
{
cout << this->a << endl;
}
};
void show(Test &t) //成员函数改成全局函数 需要添加一个参数
{
//cout << a << endl; //a是成员变量 通过对象来访问
cout << t.a << endl; //友元函数可以访问类的私有成员变量
}
int main()
{
Test t1;
t1.show();
show(t1);
return 0;
}
5-友元类.cpp
#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;
}