#include<iostream>
using namespace std;
class Student
{
static int num;
public:
Student()
{
num++;
}
~Student()
{
num--;
}
int getnum()
{
return num;
}
};
int Student::num=0;
int main()
{
Student t1;
Student t2;
Student *t3=new Student;
cout<<"Student num1 = "<<t2.getnum()<<endl;
delete t3;
cout<<"Student num2 = "<<t2.getnum()<<endl;
}
//結果為:
//Student num1=3;
//Student num2=2;
static int getnum()//靜態成員函數
#include<iostream>
using namespace std;
class Student
{
static int num;
public:
Student()
{
num++;
}
~Student()
{
num--;
}
static int getnum()
{
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 = "<<Student::getnum()<<endl;
delete t3;
cout<<"Student num2 = "<<Student::getnum()<<endl;
}
//結果為:
//num0=0;
//num1=3;
//num2=2;
靜態成員函數只能操作靜態成員變量
第一種
#include<iostream>
using namespace std;
class Student
{
static int num;
int id;
public:
Student()
{
num++;
}
~Student()
{
num--;
}
int getnum()
{
int id=0;
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 = "<<t2.getnum()<<endl;
delete t3;
cout<<"Student num2 = "<<t2.getnum()<<endl;
}
第二種( 靜態成員函數只能操作靜態成員變量)(推薦此用法)
#include<iostream>
using namespace std;
class Student
{
static int num;
int id;
public:
Student()
{
num++;
}
~Student()
{
num--;
}
int getid()
{
id=0;
return id;
}
static int getnum()
{
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 = "<<Student::getnum()<<endl;
delete t3;
cout<<"Student num2 = "<<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是私有的,不能再外部訪問
}
int main()
{
Student t1(10);
test(t1);
}
//結果為:id=10;
友類
#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);
}
//結果為:id = 10;
友元不能傳遞
#include<iostream>
using namespace std;
class Student
{
int m_id;
public:
Student(int id)
{
m_id=id;
}
friend class B;
friend class A;
};
class B
{
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);
}
//結果為:
//id=10;
詭異的程序
#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);
}
//結果為:
//id=10