c++类中的静态成员函数总结

参考http://www.cnblogs.com/carbs/archive/2012/04/04/2431992.html

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值