面向对象的设计方法兼容数据的保护和共享,静态成员的提出是为了解决不同对象之间数据共享问题的。例如要统计人员个数,出现次数等等都需要用到静态处理。
静态成员,指的是在c++类中声明成员时可以加上static关键字,这样声明的成员就叫做静态成员(包括静态数据成员和静态成员函数)。
static 数据类型 数据成员名;
静态数据成员属于类,而不属于某个对象。
【解析】point具有静态数据成员count++,第一次调用时输出1,第二次调用时输出2
#include<iostream>
using namespace std;
class point {
public:
point(int x = 0, int y = 0) :x(x), y(y) {
count++;
}
point(point& p) { //复制构造函数
x = p.x;
y = p.y;
count++;
}
~point() { //析构函数
count--;
}
void getX() {
cout << x;
}
void getY() {
cout << y;
}
void showcount() {
cout << "count=" << count << endl;
}
private:
int x, y;
static int count;//声明静态数据成员
};
int point::count = 0;//用类名限定静态成员定义和初始化
int main() {
point a(1, 1);
a.showcount();
point b(a);
b.showcount();
return 0;
}
【运行截图】
static 返回类型 静态成员函数名 (实参表);
类名::静态成员函数名(实参表); //----1
对象.静态成员函数名(实参表); //----2
对象指针->静态成员函数名(实参表);//----3
类名::静态成员函数名();//在类外直接访问静态成员函数
【解析】
#include<iostream>
using namespace std;
class Point {
public:
Point(int x = 0, int y = 0) :x(x), y(y) {//构造函数
count++;
}
Point(Point& p) { //复制构造函数
x = p.x;
y = p.y;
count++;
}
~Point() { count--; }
int getX() { return x; }
int getY() { return y; }
static void showcount() { //静态成员函数
cout << "object count:"<<count;
}
private:
int x;
int y;
static int count;
};
int Point::count = 0;
int main() {
Point a(4, 5);
cout <<"Point a:"<< a.getX ()<< " " << a.getY()<<endl;
Point::showcount();
cout << endl;
Point b(a);
cout << "Point b:" << a.getX() << " " << a.getY() << endl;
Point::showcount();
return 0;
}
【运行截图】
【题目描述】
请编写程序,计算出当日此商品的总销售款sum以及每件商品的平均售价。要求用静态数据成员和静态成员函数。
(提示: 将折扣discount,总销售款sum和商品销售总件数n声明为静态数据成员,再定义静态成员函数average(求平均售价)和display(输出结果)。
【代码】
#include
using namespace std;
class Product {
public: void set_value(); //设置商品的price和单次销售数量num
void total(); //计算总销售额sum和销售总量total_num
static void ave_count(); //计算平均商品价格
static void display(); // 显示sum,total_num和 average
private:
int num;
double price;
static double discount; //折扣
static int total_num; //总销量
static double sum; //总销售额
static double average; //平均价格
};
/数据初始化/
double Product::discount=0.98;
int Product::total_num=0;
double Product::sum=0;
double Product::average=0;
void Product::set_value(){
cout << "输入销量num和产品价格price:";
cin>>num>>price;
}
void Product::total(){
total_num+=num;
if(num>10)
sum+=numpricediscount;
else
sum+=num*price;
}
void Product::ave_count(){
average=sum/total_num;
}void Product::display(){
cout<<"num="<<total_num<<endl <<"sum="<<sum<<endl <<"average="<<average<<endl;
}
int main(){
const int t=3;
Product p[t];
for(int i=0;i<t;i++){
p[i].set_value();
p[i].total();
}
Product::ave_count();
Product::display();
return 0;
}
原文:https://www.cnblogs.com/TSmeredithH/p/11610069.html