c++静态成员与静态函数

1 静态成员的定义

1 静态变量

c++在类里面进行的仅是引用性声明,不会为之分配内存,要求必须单独对静态数据成员进行定义性的声明。形式为:

类型 类名::静态数据成员名;

此时的定义需要再加关键字static,并且可以在定义时初始化。

c++要求类中成员变量不可以直接初始化,可以采用定义函数方法时后挂变量方式初始化。

这与Java不同。

2 静态函数

定义方式与静态变量同。函数的定义可以在类内也可以在类外。

class A
{
    public:
        A(int y)
        {
            a=y;
            cout<<a+x<<endl;
        }
        //static int x;
        static void B(int z)
        {
            x=z;
            cout<<a<<"hehe"<<endl;
        }
    private:
        int a;
        static int x;
};

int A::x=1;
void A::B(int z);

int main()
{
    //A::x=2;
    A a1(2);
    a1.B(3);
    return 0;
}

2 访问限制说明

静态函数可以直接访问静态变量,但不可直接访问非静态成员,若要访问非静态成员,则必须借助于对象名或者指向对象的指针。

非静态函数可以直接访问静态变量和非静态变量。

这个特点与Java同。

时间: 2024-10-29 05:09:12

c++静态成员与静态函数的相关文章

【C/C++学院】0822-类型转换函数与构造转换函数/类的继承/类的继承以及区别/继承静态成员与静态函数//继承实现代码重用/单继承QT案例/多继承简介以及实战/Gpu编程

类型转换函数与构造转换函数 #include<iostream> class fushu { public: explicit fushu(int num)//避免隐式转换,引发歧义 { x = num; y = num; } void print() { std::cout << x << "+" << y << "i" << std::endl; } operator int(); //不支

C++静态成员函数访问非静态成员的几种方法

大家都知道C++中类的成员函数默认都提供了this指针,在非静态成员函数中当你调用函数的时候,编译器都会“自动”帮你把这个this指针加到函数形参里去.当然在C++灵活性下面,类还具备了静态成员和静态函数,即 class A { public: static void test() { m_staticA += 1; } private: static int m_staticA; int m_a }; 此时你的test函数只能去访问m_staticA成员,而不能去访问m_a.同学可能会问,这算

静态成员函数与私有构造函数(对单例模式的理解)

问题:单例模式中,静态函数中实例化了类对象,私有构造函数得到执行.构造函数是非静态成员函数,难道静态函数中能调用非静态函数吗? class Singleton { public: static Singleton * getInstance(); private: Singleton(); ~Singleton(); static Singleton * m_sglton ;//(此处也可直接写为静态变量) }; Singleton* Singleton:: m_sglton = NULL; S

static, const 和 static const 变量的初始化问题

const 常量的在超出其作用域的时候会被释放,但是 static 静态变量在其作用域之外并没有释放,只是不能访问. static 修饰的是静态变量,静态函数.对于类来说,静态成员和静态函数是属于整个类的,而不是属于对象.可以通过类名来访问,但是其作用域限制于包含它的文件中. static 变量在类内部声明,但是必须在类的外部进行定义和初始化. const 常量在类内部声明,但是定义只能在构造函数的初始化列表进行. class A { public: A(int a) : constNum(a)

15-01-11 C# 面向对象 10

类中的成员,如果不加访问修饰符,默认是private; 私有的,只能在当前类的内部访问; 理论上是给每个私有的字段配备一个公有的属性; 静态函数中只能访问静态成员;静态类中只能有静态成员;非静态函数既可以访问静态成员,也可以访问非静态成员,非静态类中既可以有静态成员,也可以有非静态成员; this的作用1.当前类的对象,是为了把字段(属性)和局部变量区分开来;字段和属性是和方法平级的,而局部变量是在方法里面的; namespace(命名空间),用于解决类重名问题,可以看做类的文件夹; 命名空间里

C#基础篇02

首先:一个完整的方法是包括两部分的,代码和注释!!!! 程序的调试: 3:设置断点:  断点之前的程序已经确保正确,可是在断点后的部分可能出现错误,所以设置完断点后,直接点击启动,然后按F11逐步棸的执行,查看,当然,之中可以设置监视的变量.逻辑表达式等!!! Convert.ToInt32("123"); int.Parse("123"); int max=n1>n2?n1:n2;           //比较两个数中,哪个数最大. Random    r=

java 静态static

静态:static 用法:是一个修饰符,用于修饰成员(成员变量和成员函数) 当成员被静态修饰后,就多了一个调用方法,即除了可以被对象调用以外,还可以直接被类名调用. 调用形式:类名.静态成员 类名.静态函数 static的特点: 1,随着类的加载而加载. 也就是说:静态会随着类的消失而消失.说明它的生命周期最长. 2,优先于对象的存在 明确一点:静态是先存在的,对象是后存在的. 3,静态成员或静态变量被所有对象所共享 4,可以直接被类名调用 实例变量:也称成员变量 类变量:静态成员变量.也称静态

c/c++静态函数和静态成员函数

c语言中static的语义 1.static变量: 1).静态局部变量 a.静态局部变量在函数内定义,生存期为整个源程序,但作用域与局部变量相同,只能在定义该变量的函数内使用.退出该函数后, 尽管该变量还继续存在,但不能使用它. b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值.而对自动变量不赋初值,则其值是不定的. 2).静态全局变量 全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式.但是他们的作用域,非静态全局 变量的作用域是整个源程序(多个源文件可以共同

C++里的静态成员函数不能用const的原因

From http://blog.csdn.net/freeboy1015/article/details/7634950 static在c++中的第五种含义:用static修饰不访问非静态数据成员的类成员函数.这意味着一个静态成员函数只能访问它的参数.类的静态数据成员和全局变量. 不能用const的原因: 这是C++的规则,const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall,而类中的static函数本质上是全局函数,调用规