C++之类的静态成员变量和静态成员函数
static静态成员函数
普通成员函数能够訪问全部成员变量。而静态成员函数仅仅能訪问静态成员变量。
我们知道。当调用一个对象的成员函数(非静态成员函数)时,系统会把当前对象的起始地址赋给 this 指针。而静态成员函数并不属于某一对象。它与不论什么对象都无关,因此静态成员函数没有 this 指针。既然它没有指向某一对象,就无法对该对象中的非静态成员进行訪问。
能够说。静态成员函数与非静态成员函数的根本差别是:非静态成员函数有 this 指针。而静态成员函数没有 this 指针。由此决定了静态成员函数不能訪问本类中的非静态成员。
静态成员函数能够直接引用本类中的静态数据成员,由于静态成员相同是属于类的,能够直接引用。在C++程序中,静态成员函数主要用来訪问静态数据成员。而不訪问非静态成员。
假设要在类外调用 public 属性的静态成员函数。要用类名和域解析符“::”。
如:
<pre name="code" class="cpp">
#include<iostream>
#include<string>
using namespace std; class Student{
private:
string name;
int age;
float score;
static int number; //定义静态成员变量
static float total;
public:
Student(string name,int age,float score);
Student(const Student & s);
~Student();
void setName(string n);
string getName();
void setAge(int a);
int getAge();
void setScore(float s);
float getScore();
void say();
static float getAverage();
};
/*注意。假设构造函数的形參和 类的成员变量名字一样。必须採用 this -> name = name ,而不能够 写成 name = name*/
Student::Student(string name,int age,float score){
this->name = name;
this ->age = age;
this ->score = score;
number++;
total += score;
} Student::Student(const Student & s){
this ->name = s.name;
this ->age = s.age;
this ->score = s.score;
} Student::~Student(){}
string Student::getName(){
return this->name;
}
int Student::getAge(){
return this->age;
}
float Student::getScore(){
return this ->score;
} void Student::setName(string n){
this ->name = n;
} void Student::setAge(int a){
this ->age =a ;
} void Student::setScore(float s){
this->score =s;
} void Student::say(){
cout << this->name <<" : " << this->age <<" : " << this ->score << " : " << Student::number <<endl;
} float Student::getAverage(){
if(number == 0)
{
return 0;
}
else
return total/number;
}
//静态变量必须初始化。才干够使用
int Student::number = 0;
float Student::total = 0; int main(int argc,char*argv[])
{
//即使没有创建对象也能够訪问静态成员方法
cout << "没有学生的时候的平均成绩"<< Student::getAverage() <<endl; Student s1("lixiaolong",32,100.0);
Student s2("chenglong",32,95.0);
Student s3("shixiaolong",32,87.0);
s1.say();
s2.say();
s3.say();
cout << "平均成绩为" << Student::getAverage() <<endl;
system("pause");
return 0;
}
C++之类的静态成员变量和静态成员函数的更多相关文章
- C++类中的静态成员变量与静态成员函数
最近一直看c++相关的项目,但总是会被c++类中的静态成员变量与静态成员函数的理解感觉很是模糊,不明白为什么类中要是用静态成员变量.于是在网上搜集了一些资料,自己再稍微总结下. 静态成员的概念: 静态 ...
- 13.C++-静态成员变量、静态成员函数
首先回顾下成员变量 能通过对象名能够访问public成员变量 每个对象的成员变量都是专属的 成员变量不能在对象之间共享 再来讲讲类的静态成员变量 介绍 静态成员变量属于整个类所有 静态成员变量的生命期 ...
- C++解析(14):静态成员变量与静态成员函数
0.目录 1.静态成员变量 2.静态成员函数 3.小结 1.静态成员变量 成员变量的回顾: 通过对象名能够访问public成员变量 每个对象的成员变量都是专属的 成员变量不能在对象之间共享 新的需求: ...
- C++ 类中的静态成员变量,静态成员函数
//类中的静态成员变量,静态成员函数 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; /* ...
- c++学习笔记之类和对象(三、static静态成员变量和静态成员函数)
一.static静态成员变量 对象的内存中包含了成员变量,不同的对象占用不同的内存,这使得不同对象的成员变量相互独立,它们的值不受其他对象的影响.是有时候我们希望在多个对象之间共享数据,对象 a 改变 ...
- static作用,静态成员变量和静态成员函数
static关键字有俩作用:(1).控制存储分配:(2).控制一个名字的可见性和连接. 随着C++名字空间的引入,我们有了更好的,更灵活的方法来控制一个大项目的名字增长. 在类的内部使用s ...
- Java中非静态成员变量、静态成员变量的初始化时机
转: Java中非静态成员变量.静态成员变量的初始化时机. 2018年05月22日 11:48:11 SilenceCarrot 阅读数 421 版权声明:技术就要分享才有意思,欢迎大家分享(注明 ...
- C++@类的静态成员变量和静态成员函数
参考: http://blog.csdn.net/morewindows/article/details/6721430 http://www.cnblogs.com/lzjsky/archive/2 ...
- C++学习10 static静态成员变量和静态成员函数
一般情况下,如果有N个同类的对象,那么每一个对象都分别有自己的成员变量,不同对象的成员变量各自有值,互不相干.但是有时我们希望有某一个或几个成员变量为所有对象共有,这样可以实现数据共享. 可以使用全局 ...
- C++类中的静态成员变量与静态成员函数的使用
代码: #include <iostream> #include <string> #include <cstdio> using namespace std; c ...
随机推荐
- Linux下date常用格式化输出
date "+%Y-%m-%d" --date "+%H:%M:%S" ::date "+%Y-%m-%d %H:%M:%S" -- ::d ...
- Nginx 编译参数详解/大全
Nginx参数: –prefix= 指向安装目录 –sbin-path 指向(执行)程序文件(nginx) –conf-path= 指向配置文件(nginx.conf) –error-log-path ...
- powerbuilder webbrowser 内嵌浏览器 select下拉框无法使用
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MA ...
- Error:Execution failed for task ‘:app:processDebugManifest’.
Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : Attribute ...
- 监控Coherence成员的加入和离开集群事件
对server事件的监控主要是实现MemberListener类,对Cache事件的监控主要通过MapListener 参考代码 package coherencetest; import com.t ...
- WebLogic Cluster Sevlet的配置
虽然生产环境中不建议使用,但因为客户需要考试可能用到,所以又做了一遍 1. 配置受管Server,ProxyServer,过程略 2.构建Proxy Application 建立一个ProxyApp的 ...
- elasticsearch中的filter与aggs
今天在ES上做了一个聚合,先过滤一个嵌套对象,再对另一个域做聚合,但是过滤似乎没有起作用 { "size":0, "filter":{ "nested ...
- JavaScriptCore全面解析 (上篇)
收录待用,修改转载已取得腾讯云授权 作者 | 殷源 编辑 | 迷鹿 殷源,专注移动客户端开发,微软Imagine Cup中国区特等奖获得者,现就职于腾讯. JavaScript越来越多地出现在我们客户 ...
- Linux文件夹、分区
必须明确,硬盘分区的存在,是由硬盘的物理特性决定的,不会因为操作系统的不同而有所改变 所以不用对为根目录/挂载分区的同时还为/usr挂载分区感到惊讶 ====分区的概念==== 可以把一个硬盘比成 ...
- 云计算之路:AWS, Azure, Aliyun, UCloud提供的Windows操作系统
如果您用的是微软平台,如果您准备走上云计算之路,估计您首先关心的是云服务商有没有提供合适的Windows操作系统. 这里把我们知道的知名云服务商提供的Windows操作系统列出来,供大家参考. 1. ...