普通成员方法
1.属于类的作用域
2.调用该方法时,需要依赖一个对象(常对象不是无法调用的)
3.可以任意访问对象的私有成员变量
4.会产生this指针—>“类名” *this
static静态成员方法
1.属于类的作用域
2.用类名作用域来调用方法
3.可以访问对象的任意私有成员,但是仅限于不依赖对象的成员(只能调用其他的static静态成员)
4.没有this指针
普通成员方法和静态成员方法最核心的区别就是编译器会给普通成员方法添加一个this形参变量,而静态方法不会生成this形参。如果我们方法访问的是所有对象共享的信息,最好写成静态成员方法。
常成员方法
1.产生的this指针是—>const “类名” *this。
2.属于类的作用域
3.调用依赖一个对象,普通对象常对象都可以
4.可以任意访问对象的私有成员,但是只能读,不能写
如果这个方法只做了读操作而不做写操作,建议写成常成员方法。
下面是一个实例:
#include <iostream>
using namespace std;
class CDate
{
public:
//“CDate”: 没有合适的默认构造函数可用
CDate(int y, int m, int d)
{
_year = y;
_month = m;
_day = d;
}
void show() const
{
cout << _year << "/" << _month << "/" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
class CGoods
{
public:
CGoods(const char *n, int a, double p, int y, int m, int d)
:_date(y, m, d)//指定了对象的构造方式
{
strcpy(_name, n);
_amount = a;
_price = p;
_count++;//记录所有产生新对象的数量
}
//常成员方法,只要是只读操作的成员方法,一律实现成常成员方法
void show() const//打印商品私有的信息 CGoods *this
{
cout << "name:" << _name << endl;
cout << "amount:" << _amount << endl;
cout << "price:" << _price << endl;
_date.show();
}
//普通成员方法
void show()//const CGoods *this
{
cout << "name:" << _name << endl;
cout << "amount:" << _amount << endl;
cout << "price:" << _price << endl;
_date.show();
}
//静态成员方法,不依赖于对象,也就没有this指针
static void showCGoodsCount()//打印所有商品共享的信息
{
cout << "所有商品的种类数量是: " << _count << endl;
}
private:
char _name[20];
int _amount;
double _price;
CDate _date;//成员对象
static int _count;// 静态的成员变量只是用来声明,还需要在类外定义 不属于对象,而是属于类级别 用来记录商品的总数量
};
//静态成员变量一定要在类外进行定义并且初始化
int CGoods::_count = 0;
int main()
{
CGoods good1("商品1", 100, 35.0, 2020, 5, 10);
good1.show();
CGoods good2("商品2", 100, 35.0, 2020, 5, 10);
good2.show();
CGoods good3("商品3", 100, 35.0, 2020, 5, 10);
good3.show();
CGoods good4("商品4", 100, 35.0, 2020, 5, 10);
good4.show();
//统计所有商品的总数量(静态成员方法)
CGoods::showCGoodsCount();
const CGoods good5("非卖品",100,5.0,2020,05,12);
good5.show();//调用了show方法,把good5对象的地址传递了进来CGoods::show(&good5);
return 0;
}