C++基础
静态成员和友元
- static:标志静态成员
- friend:标志友元
#include <iostream>
using namespace std;
//+int num;使用全局变量
class Student
{ //-int num;
static int num;
int id;
public:
Student()
{
//-num=0;每执行一次Student都会重归为0,最后结果为1,1
num++;
}
~Student()
{
num--;
}
int getId()
{
id=0;
return num;
}
static int getNum()
{
//id=0;//在此处id为int类型,不能在此修饰.一个静态成员函数不与任何对象相联系,故不能对非静态成员进行默认访问。
return num;
}
};
int Student::num=0;//初始化一定要在外面
int main()
{
// cout<<"student num0="<<Student::getNum()<<endl;
Student t1;
Student t2;
Student *t3=new Student;
cout<<"student num1="<<t1.getNum()<<endl;
delete t3;
cout<<"student num2="<<t1.getNum()<<endl;
// cout<<"student num0="<<Student::getNum()<<endl;
}
- 静态数据成员用得比较多的场合一般为:
- 用来保存流动变化的对象个数
- 作为一个标志,指示一个特定的动作是否发生
- 一个指向一个链表第一个成员或最后一个成员的指
- 静态成员函数
- 静态成员函数定义是类的内部实现,属于类定义的一部分。它的定义位置与一般成员函数一样。
- 一个静态成员函数不与任何对象相联系,故不能对非静态成员进行默认访问。
友元
#include <iostream>
using namespace std;
class Student
{
int m_id;
public:
Student(int id)
{
m_id=id;
}
friend void test(Student t);
};
void test(Student t)
{
cout<<"id="<<t.m_id<<endl;//m_id是受保护的私有的,所以不用friend会出错。
}
int main()
{
Student t1(10);
test(t1);
}
#include <iostream>
using namespace std;
class Student
{
int m_id;
public:
Student(int id)
{
m_id=id;
}
friend class A;
};
class A
{
public:
void test(Student t)
{
cout<<"id="<<t.m_id<<endl;
}
};
int main()
{
Student t1(10);
A a;
a.test(t1);
}
#include <iostream>
using namespace std;
class Student;
class A
{
public:
void test(Student t);
};
class Student
{
int m_id;
public:
Student(int id)
{
m_id=id;
}
friend void A::test(Student t);
};
void A::test(Student t)
{
cout<<"id="<<t.m_id<<endl;
}
int main()
{
Student t1(10);
A a;
a.test(t1);
}
class S
{
friend B;
//friend B;
//friend A;//可过
}
Class B
{
friend A;
}
class A
{}