CPP_const&static
const
1. 定义本地常量,替换宏。
#define LENGHTH 16
static const int LENGHTH = 16;
2. const出现在星号左边,表示被指物是常量;const出现在星号的右边,表示指针本身是常量。
const int *p = &a;
p=&b; true
*p = 1; error
这里const修饰的是int,而int定义的是一个整数值。因此×p所指向的对象值不能通过×p来修改,但是可以重新给p来赋值,使其指向不同的对象。
3. const成员函数,编译器确保该函数不会改动对象数据。
4. const成员变量,表示一旦初始化以后不会再改变的数据,必须在类的构造函数初始化列表中初始化,不能在函数体内赋值。
static
1. static成员变量,表示类公有的数据(可以是private成员),没有保存在对象内部,存在于rw数据段,类sizeof不包含static变量大小。
静态数据成员在类外分配空间和初始化,必须在main函数和类外定义static变量,int A::b = 2;
static在C++中更好的替换全局变量或对象维护数量count(有类而非对象维护)设计的。
2. static成员函数,表示不依赖于对象的静态方法。可对象调用,也可直接类调用(A::goo()).
static成员方法中参数不包含隐藏的this指针(this是一个对象的指针),不能使用指针。
static成员方法不可访问非static成员变量。
example
// martain.h
#ifndef _MARTAIN_H_
#define _MARTAIN_H_ class Martain{
public:
Martain(int id);
~Martain(); void fight() const;
void hide() const;
static int getCount(); private:
static int martainCount;
const int m_id;
}; #endif
// martain.cc
#include "martain.h" int Martain::martainCount = ; Martain::Martain(int id)
:m_id(id)
{
// m_id = id; // const常量只能在初始化列表初始化
martainCount++;
} Martain::~Martain(){
martainCount--;
} int Martain::getCount(){
// return martainCount + m_id;
return martainCount ; // 静态函数不能访问非静态成员
} void Martain::fight() const{ } void Martain::hide() const{ }
// main.cc
#include "martain.h"
#include <iostream> using namespace std; void func(){
Martain c();
int count = Martain::getCount();
cout << "count= " << count << endl;
} int main(int argc, char *argv[])
{
int count = Martain::getCount();
cout << "count= " << count << endl; Martain a();
count = Martain::getCount();
cout << "count= " << count << endl; Martain b();
count = b.getCount();
cout << "count= " << count << endl; func();
count = Martain::getCount();
cout << "count= " << count << endl; return ;
}
$ g++ main.cc martain.cc -o test
$ ./test
count=
count=
count=
count=
count=
CPP_const&static的更多相关文章
- static,你还敢用吗?(二)
为了压系统,昨天小组在测试环境模拟了一大批订单数据.今天上午查看记录的账单计息日志,发现了一大堆的MySqlException MySql.Data.MySqlClient.MySqlExceptio ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- const extern static 终极指南
const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...
- PHP static静态属性和静态方法
这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内 ...
- static,你还敢用吗?
我用火狐的HttpRequester测试开发组里一个同学发布的Web API接口,遇到了一个奇怪的问题. 我测试边界情况时,第一次调用响应的结果是正常的,但当再次及以后的请求时,却返回了异常“Syst ...
- Java关键字:static
通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...
- Android 中关于static的使用问题
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5251564.html 项目中,在不停地接收串口数据很长一段时间(几小时)后,会偶然性的报错.初步排除了oom ...
- iOS: 在UIViewController 中添加Static UITableView
如果你直接在 UIViewController 中加入一个 UITableView 并将其 Content 属性设置为 Static Cells,此时 Xcode 会报错: Static table ...
- 浅谈Static关键字
1.使用static关键字声明的属性为全局属性 未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beiji ...
随机推荐
- javascript刷新页面代码
原文链接:http://caibaojian.com/javascript-refresh-page.html reload 方法,该方法强迫浏览器刷新当前页面. 语法:location.reload ...
- shell将脚本输出结果记录到日志文件
使用tee命令: sh portal/main.sh |tee log.txt 获取脚本父类路径cmddir="`dirname $0`"
- php分享十八七:mysql基础
mysql操作数据库代码: $link = @mysql_connect('localhost:3306', 'root', 'root') or die(mysql_error()); mysql_ ...
- oozie 常用命令
1.验证wokflow.xmloozie validate /appcom/apps/hduser0401/mbl_webtrends/workflow.xml 2.提交作业,作业进入PREP状态 o ...
- SharePreference 注册 registerOnSharedPreferenceChangeListener 无法回调的问题
以前一直没有用过 registerOnSharedPreferenceChangeListener 回调方法,今天用到了,就设置了下,结果发现不起作用,因为一直没有回调. 代码: mSp = this ...
- Android Eclipse Libs 的 jar 源码查看 (或者新版本ADT无法查看jar的源码)
问题背景:在使用比较新的ADT的时候,无法导入Jar中的源码包查看源码.只好自己打开压缩包,实在恼火.在半年前,只好这样. 问题解决方案:我就以 " android-support-v4.j ...
- 【Unity】7.4 游戏外设输入
分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 Unity可以处理摇杆.游戏手柄.方向盘等标准游戏外设的输入,使用的方法如下图所示: 虚拟按键需要在输入管理器中配置,把 ...
- scala future
https://docs.scala-lang.org/overviews/core/futures.html https://docs.scala-lang.org/overviews/index. ...
- InfoQ 趋势报告:架构和设计领域技术演变详解
https://www.infoq.cn/article/R7lWXd0R4VFf3E0bB*38 本文概述了我们对当前“架构和设计”领域的看法,这个领域侧重于基础设施模式.技术框架模式的实现,以及软 ...
- nginx源码分析:module机制
根据nginx官方文档,添加一个module的介绍,当我们需要添加一个module时,需要以下操作: 1.为该module新建一个目录. 2.添加一个config文件,一个module核心代码源文件. ...