常成员与静态成员
#include <iostream>
using namespace std;
class A
{
private:
const int a;
static int b;
static const int c;
int d;
public:
A(int);
void printf();
void printf() const;
};
A::A(int a) :a(a)
{
d = this->a;
}
int A::b = 10;
const int A::c = 29;
void A::printf()
{
cout << "调用普通成员函数 " << endl;
cout << "常成员a为 " << this->a << endl
<< "静态成员b为 " << this->b << endl
<< "常静态成员c为 " << this->c << endl
<< "普通成员d为 " << this->d << endl;
}
void A::printf()const
{
cout << "调用常成员函数 " << endl;
cout << "常成员a为 " << this->a << endl
<< "静态成员b为 " << this->b << endl
<< "常静态成员c为 " << this->c << endl
<< "普通成员d为 " << this->d << endl;
}
void main()
{
A a1(89);
a1.printf();
cout << endl;
const A a3(78);
a3.printf();
}
const A a3(78);
常对象,只能调用常成员函数
void printf() const;
常成员函数,不能更新数据成员,不能调用非常成员函数
实现时要带关键字const
可以被普通对象调用(源码中若没有普通的成员函数与之重载,就会调用常成员函数)
可重载 void printf(); void printf() const;
常数据成员,静态数据成员,静态常数据成员
const int a;
static int b;
static const int c;
各自的定义方法
A::A(int a) :a(a)
{
d = this->a;
}
int A::b = 10;
const int A::c = 29;
静态成员
在private内声明的静态成员只能在类内访问,而声明为public类型的静态成员可以通过类名::标识符访问,当然也可以通过对象访问
静态成员函数
如果静态成员函数是public类型的,可以通过类名::函数名(参数)访问,也可以通过对象访问