c++类中的静态成员函数总结
2016-09-30 16:57
253 查看
参考http://www.cnblogs.com/carbs/archive/2012/04/04/2431992.html
1.c++中可以对类中私有成员中的静态变量初始化吗?
一般情况下对类中私有部分的访问可以是公共部分的成员函数,也可以是友元函数。那可以直接对私有部分的静态成员进行初始化吗。
(1)static成员的所有者是类本身和对象,但是所有对象拥有一样的静态成员。从而在定义对象时不能通过构造函数对其进行初始化。
(2)静态成员不能在类定义里边初始化,只能在class body外初始化。
(3)静态成员仍遵循public,private,protected的访问准则
(4)静态成员函数不可以调用类的非静态成员。因为静态成员函数不含this指针。
【示例代码】
2.静态成员函数不允许引用类的非静态成员,但可以访问对象中的非静态成员
【示例代码】
C++中初始化类中的静态数组
class A
{
public:
static int arr[3];
};
int A::arr[3]={1,2,3};
int main()
{
A a;
cout<<a.arr[1]<<endl;
system("pause");
return 0;
}
关于静态成员函数的总结还可以参考http://www.cnblogs.com/lzjsky/archive/2011/01/24/1943199.html
http://blog.csdn.net/tobefxz/article/details/14109697
1.c++中可以对类中私有成员中的静态变量初始化吗?
一般情况下对类中私有部分的访问可以是公共部分的成员函数,也可以是友元函数。那可以直接对私有部分的静态成员进行初始化吗。
(1)static成员的所有者是类本身和对象,但是所有对象拥有一样的静态成员。从而在定义对象时不能通过构造函数对其进行初始化。
(2)静态成员不能在类定义里边初始化,只能在class body外初始化。
(3)静态成员仍遵循public,private,protected的访问准则
(4)静态成员函数不可以调用类的非静态成员。因为静态成员函数不含this指针。
【示例代码】
#include<iostream> #include<string> using namespace std; class Account{ public: Account(string name, int money) :owner(name), amount(money) { } ~Account() { } double applyint() { amount += amount * interestRate1; return amount; } static double rate() { return interestRate1; // 注意返回值 } static void rate(double); static double interestRate1;//public,其他非成员可以访问 private: string owner; double amount; static double interestRate2; //private,成员和友元才可访问 static double initRate(); }; double Account::interestRate1 = 2.0; //正确的静态成员初始化 double Account::interestRate2 = 3.0; double Account::initRate() { return 2.0; } //所有的静态成员在类体外定义时都不再写static void Account::rate(double newRate) { interestRate1 = newRate; } int main() { Account Yang("Yang", 10); //interestRate = 2.0 cout << Yang.applyint() << endl; cout << Yang.applyint() << endl;//注意两个结果不一样,因为amount第一次调用之后就变了。 Yang.rate(4.0); cout << Yang.applyint() << endl;//interestRate = 4.0 cout << Account::interestRate1 << endl; //public静态成员 Account::interestRate1 = 3.0; //对应上面的赋值语句 cout << Yang.applyint() << endl;//interestRate = 3.0 Account Ning("Ning", 200);//interestRate = 3.0 cout << Ning.applyint() << endl; Yang.interestRate1 = 6.0; // 也可以,并且还改了类中的静态成员值 Account Pei("Pei", 2);// interestRate=6.0 cout << Pei.applyint() << endl; return 0; }
2.静态成员函数不允许引用类的非静态成员,但可以访问对象中的非静态成员
【示例代码】
#include<iostream> using namespace std; class M { public: M(int a) { A = a; B += a;//这里每调用一次构造函数不就重新刷新一次B了吗?用这种方法记录生成对象的个数?? } static void f1(M m); private: int A; static int B; }; void M::f1(M m) { cout << "A=" << m.A;//在静态成员函数中,只能通过对象访问类的非静态成员 cout << "B=" << B;//B是静态成员,可以在静态成员函数中访问 } int M::B = 0;//一直不明白这里的B不是私有的吗?为什么可以直接访问?是因为这句话没有在任何函数中吗? void main() { M P(5), Q(10); M::f1(P); //访问静态成员函数,前面可以用类名或者对象名,下同 M::f1(Q); }
C++中初始化类中的静态数组
class A
{
public:
static int arr[3];
};
int A::arr[3]={1,2,3};
int main()
{
A a;
cout<<a.arr[1]<<endl;
system("pause");
return 0;
}
关于静态成员函数的总结还可以参考http://www.cnblogs.com/lzjsky/archive/2011/01/24/1943199.html
http://blog.csdn.net/tobefxz/article/details/14109697
相关文章推荐
- 关于C++类静态成员及函数的访问
- C++类静态数据成员与类静态成员函数
- C++类中的静态成员变量与静态成员函数
- C++类的成员函数使用的一些小总结
- C++类静态成员与类静态成员函数详解
- C++类中静态成员数据和静态成员函数的自我理解
- C++静态成员变量和静态成员函数使用总结
- C++类特殊数据成员总结(常数据成员、静态数据成员、静态常数据成员)
- C++类静态成员与类静态成员函数详解
- 技巧总结:非静态成员函数的非法调用
- (转) C++ 静态成员和函数的总结(不知道原创在哪里=。=)
- C++类中的静态成员变量和静态成员函数的作用
- C++类静态成员与类静态成员函数
- C++类中的静态成员变量和静态成员函数的作用
- C++类中静态成员函数
- C++类中静态成员函数和静态成员变量
- C++类的常成员函数以及静态成员函数
- 关于C++类的静态成员函数
- C++静态成员变量和静态成员函数的使用方法总结
- C++类中的静态成员变量和静态成员函数的作用