1.静态变量是所有对象共享的,静态方法只能访问访问静态对象,成员方法可以调用静态方法
#include<iostream>
using namespace std;
class Bank
{
private:
const char* name;
double money;
public:
Bank(const char* name, double money = 0.01) :name(name), money(money) { accountSum++; };
~Bank() { accountSum--; };
private:
static int accountSum;//static变量,所有对象共享,内存中只有一份
static float interestRate;//static变量,所有对象共享,内存中只有一份
public:
//等价于void show(Bank* const this)
void show() {
cout << name << " " << money << endl;
print();//成员方法可以调用静态方法,反过来不行,因为静态方法没有this指针
}
static void print() {//静态函数只能访问静态成员,因为没有this指针
cout << accountSum << " " << interestRate << endl;
}
};
int Bank::accountSum = 0;//静态成员不属于任何一个类,他的初始化在类之外
float Bank::interestRate = 3.1415;//静态成员不属于任何一个类,他的初始化在类之外
int main()
{
Bank account("zhangsan");
account.show();
return 0;
}
常对象只能调用常方法,常方法不能修改成员数据
#include<iostream>
using namespace std;
class Bank
{
private:
int ID;
const char* name;
double money;
public:
Bank(int ID,const char* name, double money = 0.01) :ID(ID),name(name), money(money) {};
Bank(const Bank& account);
~Bank() {};
public:
//等价于double withdraw(Bank* const this,double money)
double withdraw(double money);//取款
//double deposit(double money);//存款
double transfer(double money);//转账
//等价于double withdraw(const Bank* const this,double money);
double withdraw(double money) const;
//double deposit(double money) const;
};
//Bank::Bank(Bank* const this,const Bank& account)
Bank::Bank(const Bank& account)//此处account是常对象
{
this->ID = account.ID;
this->name = account.name;
//this.money = account.transfer(100);
//此处我想调用转账,是不行的,因为account是常对象,他只能调用常方法
this->money = account.withdraw(100);
}
//等价于double Bank::withdraw(Bank* const this,double money)
double Bank::withdraw(double money)
{
this->money = this->money - money;
return money;
}
//等价于double Bank::withdraw(const Bank* const this,double money);
double Bank::withdraw(double money) const
{
//this->money = this->money - money;//这会报错,常对象只能调用常方法
//常方法的出现就是为了避免修改自己的数据成员,因为常量对象,如果能修改就和自身定义矛盾了
return money;
}
int main()
{
Bank accountA(342548,"zhangsan");
Bank accountB(accountA);
return 0;
}