C++ 类中的static成员的初始化和特点 #include <iostream> using namespace std; class Test { public: Test() : y(1), r(y), d(3){} //对于常量型成员变量和引用型成员变量,必须通过参数化列表的方式进行初始化. ~Test(){} int y; //普通变量成员 int &r; //引用成员变量 const int d; //常量成员变量 static int c; //静态成员变量 stati…
在C++的类中有些成员变量初始化和一般数据类型的成员变量有所不同.以下测试编译环境为: ➜ g++ -v Using built-in specs. COLLECT_GCC=g++ Target: x86_64-linux-gnu gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 测试代码(g++编译通过): #include <iostream> using namespace std; class Test { publi…
//*基类中的static成员,在整个继承层次中只有一个实例 //*在派生类中访问基类中的static成员的方法 //1.基类名::成员名 //2.子类名::成员名 //3.对象.成员名 //4.指针->成员名 //5.成员名 #include <iostream>//txwtech-CppPrimer_静态成员与继承cc31a_demo using namespace std; //*基类中的static成员,在整个继承层次中只有一个实例 //*在派生类中访问基类中的static成员的…
首先静态成员可以是public的,也可以是private的,只需在一般的变量.函数声明语句前加上static关键字即可声明一个static变量. 类中的静态成员存在与任何对象之外,所有该类对象的共享一个static成员. 静态成员对象不与任何对象绑定在一起,包括this指针.静态成员函数不能声明为const的,也不能在static函数体中使用this指针. 可以直接使用作用与运算符访问静态成员,同时可以通过类的对象,引用或者指针来访问static成员,尽管它们有时是private成员.成员函数可…
一.静态成员变量 1.属于整个类而不是某个对象实例,所以可以直接通过类名和对象名去调用. 2.静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收 二.静态方法 1.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员:如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量 2. 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量 3. 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法 注…
刚遇到一个问题,需要的类成员为指针的引用,而引用不能在构造函数里初始化,必须在初始化列表中进行初始化,并且需要该引用在构造函数中的形参必须为引用形式 1: class ThreadParam { 2: public: 3: ThreadParam(CNotifyWindow* &pNotifyWindow) : m_pNotifyWindow(pNotifyWindow) { 4: } 5: 6: CNotifyWindow* &m_pNotifyWindow; 7: };…
C++类中谈到static,我们可以在类中定义static成员,static成员函数!C++primer里面讲过:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联!这句话可能比较拗口,其实可以这么理解:每个static数据成员可以看成是类的一个对象,而不与该类定义的对象有任何关系!下面我们就来具体看看类中的static数据成员! 谈到数据成员,我们最先想到的应该是怎么去定义一个static数据成…
常变量.常对象.常引用.指向常对象或常变量的指针等在定义时都使用了const关键字,这是C++语言引入的一种数据保护机制,称为const数据保护机制.例如通过const关键字主动地将被调函数形参进行限定,限定被调函数不能修改主调函数传递过来的数据. 下面通过一个出租车类(Taxi),更好的理解常成员和常函数成员: class Taxi //定义出租车类 { private: int price; //出租车里程单价 int fare; //出租车收费总额 public: void SetPric…
在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static ! 在C语言中,我们使用pthread_create创建线程,线程函数是一个全局函数,所以在C++中,创建线程时,也应该使用一个全局函数.static定义的类的成员函数就是一个全局函数. 更多 参考  http://blog.csdn.net/ksn13/article/details/40538083 #include <pthread.h> #…
下列代码可以通过编译吗?如何修改使其通过编译? template <class T> struct sum {   static void foo(T op1 , T op2){    cout << op1 <<op2;    } } sum::foo(1,3);       template <class 形参名,class 形参名,......> 返回类型 函数名(参数列表) { 函数体 } 其中template和class是关键字,class可以用t…
文档主要来自:http://blog.csdn.net/yjkwf/article/details/6067267 1. static类型 用static可以为类类型的所有对象所共有,像是全局对象,但又被约束在类类型的名字空间中.static定义的静态常量在函数执行后不会释放其存储空间. 可以实施封装,将其放在private或protected区域中. static成员没有this指针,它不是任何一个对象的组成部分,推荐用“类名::static成员名调用”. static成员函数声明时应写明st…
C++中的static成员变量主要用来为多个对象共享数据 例: #include <iostream> using namespace std; class Student{ public: Student(char *name, int age, float score); void show(); private: static int m_total; //静态成员变量 private: char *m_name; int m_age; float m_score; }; //初始化静态…
与任何其他类相同,类模板可以声明 static 成员: template <typename T> class Foo { public: static std::size_t count() { return ctr; } void addctr() { ctr++; } void subctr() { ctr--; } private: static std::size_t ctr; // 下面可以有其他成员接口 }; template <typename T> std::si…
类模版中声明static成员 template <class T> class Foo { public: static size_t count() { ++ctr; cout << ctr << endl; return ctr; } private: static size_t ctr; }; 类模版Foo中static的成员变量ctr和成员函数count(). 类模版static成员变量的初始化 template<; //类外 类模版Foo每次实例化表示不…
C++中的static 成员永远是我心中的痛,记了好多次了,但是今天在项目中依然忘记了,今天写下来,方便以后不用再去Baidu.google搜索了. 在头文件中声明静态成员 static int i; 在源文件中不可以再重复使用static初始化静态成员变量了: int i = 0;…
前言 最近除了搞ASP.NET MVC之外,我也在思考一些编程实践方面的问题.昨天在回家路上,我忽然对一个问题产生了较为清晰的认识.或者说,原先只是有一丝细微的感觉,而现在将它和一些其他的方面进行了联系,也显得颇为“完备”.这就是问题便是:如何对待类中internal成员.我现在认为“类中的internal成员可能是一个坏味道”,换句话说,如果您的类中出现了internal的成员,就可能是设计上的问题了. 可能这个命题说得还有些笼统,所以再详细地描述一下比较妥当.我的意思是,您的类库中出现int…
转自:http://blog.csdn.net/xiayefanxing/article/details/7382192 http://www.cnblogs.com/SelaSelah/archive/2012/04/09/2438651.html 深入详解 1.静态数据成员 在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员. 先举一个静态数据成员的例子. //Example 5 #include "stdafx.h" #include <iost…
静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问,而静态成员函数可不建立对象就可以被使用.   或者说静态函数与一般函数没有太大的区别,只是访问有限制,静态变量跟一般的全局变量的区别就是访问有限制. static变量 static变量不像普通的变量,static变量独立于一切类对象处在.static修饰的变量先于对象存在,所以static修饰的变量要在类外初始化.因为static是所有对象共享的东西嘛,必须要比对象先存在的 class test { private: publi…
静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问,而静态成员函数可不建立对象就可以被使用.   或者说静态函数与一般函数没有太大的区别,只是访问有限制,静态变量跟一般的全局变量的区别就是访问有限制. static变量 static变量不像普通的变量,static变量独立于一切类对象处在.static修饰的变量先于对象存在,所以static修饰的变量要在类外初始化.因为static是所有对象共享的东西嘛,必须要比对象先存在的 class test { private: publi…
有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同.这些特殊的类型的成员变量包括: a.引用 b.常量 c.静态 d.静态常量(整型) e.静态常量(非整型) 常量和引用,必须通过参数列表进行初始化.    静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末. 参考下面的代码以及其中注释:#include <iostream>using namespace std; class BClass{public: BClass…
本文环境:Python 2.7 一个类的三个对象实例的属性被同时修改 有段代码如下: class task_queue: queue=[] def append(self,obj): self.queue.append(obj) def print_queue(self): print self.queue if __name__=="__main__": a=task_queue() b=task_queue() c=task_queue() a.append('tc_1') a.p…
const成员变量 举个例子 #include <iostream> using namespace std; class A { public: A(int size) : SIZE(size) {}; private: const int SIZE; }; int main() { A a(); } 说明 在类中声明变量为const类型,但是不可以初始化 const常量的初始化必须在构造函数初始化列表中初始化,而不可以在构造函数函数体内初始化 但是 此时的const变量属于具体的一个对象,…
//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 1 //普通代码块:在方法或语句中出现的{}就称为普通代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行” 2 public class CodeBlock01{ 3 public static void main(String[] args){ 4 5 { 6 int x=3; 7 Syst…
与Arrays一样,Collections类中也有一些实用的static方法. (1) 排序操作 reverse(List list):反转指定List集合中元素的顺序 shuffle(List list):对List中的元素进行随机排序(洗牌) sort(List list):对List里的元素根据自然升序排序 sort(List list, Comparator c):自定义比较器进行排序 swap(List list, int i, int j):将指定List集合中i处元素和j出元素进行…
http://www.cnblogs.com/kex1n/archive/2011/04/05/2006194.html effectie c++的条款4中提到: (global对象,定义在namespace内的对象,class内的static对象,函数内的static对象,file作用域内的 static对象)统称为static对象.其中函数内的static对象又叫local static object, 其他的叫non-local static object. non-local stati…
假如我有一个类库 Lib,提供一个类 ClassA 对外服务,ClassA 中有若干只读属性 PropA, PropB 等等,外部调用者无法对 ClassA 中的 PropA 和 PropB 进行写操作,于是我可以这样定义: namespace Lib { public class ClassA { public string PropA { get; private set; } public string PropB { get; private set; } } } 但是我在 Lib 库中…
最近又重温了一遍<java编程思想>,在看的过程中产生一个想法,java中继承关系的父子类,相同的方法会被重写,那相同的变量会怎样呢? 答案是变量没有重写之说,如果子类声明了跟父类一样的变量,那意谓着子类中将有两个相同名称的变量 : 看如下有趣的例子: public class A { public int m = 1; public void view(){ System.out.println(this.m); System.out.println(this.getClass()); }…
先看源码,在VS2010环境下无法编译通过,在VS2013环境下可以编译通过,并且可以运行,只是运行结果并不是我们期待的结果. 最初通过MyCircle类定义对象c1时,为对象分配内存空间,r没有初始化,其值为乱码,pi为3.1415926,area为乱码. [cin>>c1.r]这个语句为c1.r赋值,假设为10,然后执行[cout<<c1.area<<endl],我们来看,执行cout时是从内存空间中拿c1.area的值,这个值在定义对象时候已经确定是一个乱码值,此…
在C++中存在一个特殊函数,他就是复制构造函数,假如我们有类A,如果有A a;A b=a;   在这种情况下利用A类变量a来给同是A类变量的b来赋值,这个时候类会使用复制构造函数,如果我们不显式声明复制构造函数,那么类将会调用默认的复制构造函数.下面的代码说明了这一情况,如果我们将类StringBad中的复制构造函数StringBad(StringBad &)去掉,那么count最后输出的结果会为复制(count为静态变量用来记录类StringBad的对象个数). main.cpp #inclu…
16.19 编写函数,接受一个容器的引用,打印容器中的元素,使用容器的size_type和size成员来控制打印元素的循环. 16.20 重写上一题的函数,使用begin和end返回的迭代器来控制循环. #include<iostream> #include<string> #include<vector> #include<list> using namespace std; template <typename T> void print1(…