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的更多相关文章

  1. static,你还敢用吗?(二)

    为了压系统,昨天小组在测试环境模拟了一大批订单数据.今天上午查看记录的账单计息日志,发现了一大堆的MySqlException MySql.Data.MySqlClient.MySqlExceptio ...

  2. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  3. const extern static 终极指南

    const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...

  4. PHP static静态属性和静态方法

    这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内 ...

  5. static,你还敢用吗?

    我用火狐的HttpRequester测试开发组里一个同学发布的Web API接口,遇到了一个奇怪的问题. 我测试边界情况时,第一次调用响应的结果是正常的,但当再次及以后的请求时,却返回了异常“Syst ...

  6. Java关键字:static

    通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...

  7. Android 中关于static的使用问题

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5251564.html 项目中,在不停地接收串口数据很长一段时间(几小时)后,会偶然性的报错.初步排除了oom ...

  8. iOS: 在UIViewController 中添加Static UITableView

    如果你直接在 UIViewController 中加入一个 UITableView 并将其 Content 属性设置为 Static Cells,此时 Xcode 会报错: Static table ...

  9. 浅谈Static关键字

    1.使用static关键字声明的属性为全局属性 未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beiji ...

随机推荐

  1. java与C++之间进行SOCKET通讯要点简要解析

    原文链接: http://blog.csdn.net/hslinux/article/details/6214594 java与C++之间进行SOCKET通讯要点简要解析 hslinux 0.篇外语 ...

  2. echarts legend 的单选模式以及轮播技巧

    1.设置 legend 属性: selectedMode: 'single' 2.使用 myCharts.dispatchAction 来设置legend的聚焦 broadcast (v) { // ...

  3. Spring Security教程(四):自定义登录页

    在前面的例子中,登陆页面都是用的Spring Security自己提供的,这明显不符合实际开发场景,同时也没有退出和注销按钮,因此在每次测试的时候都要通过关闭浏览器来注销达到清除session的效果. ...

  4. log4j的正确使用姿势

    最近清明节,朋友公司的日志爆了,说控制台打得太满了,出了问题,早上4点多被喊去公司修改代码,他们把所有的日志全部在控制台打印了,结果就...我说日志这么做不可取啊,你们打印出来的内容太多啦,控制台没必 ...

  5. LeetCode(35) Search Insert Position

    题目 Given a sorted array and a target value, return the index if the target is found. If not, return ...

  6. 菜鸟学SSH(十三)——Spring容器IOC解析及简单实现

    最近一段时间,“容器”两个字一直萦绕在我的耳边,甚至是吃饭.睡觉的时候都在我脑子里蹦来蹦去的.随着这些天一次次的交流.讨论,对于容器的理解也逐渐加深.理论上的东西终归要落实到实践,今天就借助Sprin ...

  7. 菜鸟调错(一)——Maven项目部署到Jboss出现:Failed to create a new SAX parser

    今天调试的时候遇到一个错误,往Jboss的deploy目录扔war包的时候,报了一个“Failed to create a new SAX parser”的错误.在网上找了找解决方案,一般都说将项目中 ...

  8. 关于https中的算法

    1,对称加密算法,是指加密和解密使用相同的密钥,典型的算法有RSA,DSA,DH 2,非对称加密算法:又称为公钥加密算法,是指加密和解密使用不同的密钥,公共的公钥用于加密,私钥用于解密,比如第一次请求 ...

  9. the-implementation-of-epoll

    Enhanced Char Driver Operations http://www.xml.com/ldd/chapter/book/ch05.html https://idndx.com/2014 ...

  10. adaptive query processing

    http://www.cs.umd.edu/~amol/talks/VLDB07-AQP-Tutorial.pdf https://www.cis.upenn.edu/~zives/research/ ...