C++中的static函数和const函数

C++中的static函数和const函数

一、static特点

1.这样的函数只能在本文件中被调用
2.在同–源程序中其他文件可以定义同名的函数

#include <iostream>
using namespace std;
//static的作用:1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
//2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
//3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那
	class Std{
		public:
		Std()//构造函数
		{
			cout<<__func__<<":"<<__LINE__<<endl;
		}
		Std(const Std &obj )//拷贝构造函数
		{
			cout<<__func__<<":"<<__LINE__<<endl;
		}
		~Std()//析构函数
		{
			cout<<__func__<<":"<<__LINE__<<endl;
		}
	public:
	void setval(int val)
	{

	this->val=val;
	return;
	}
	int getval()
	{

		return this->val;
	}
	static int getmyval()//static静态变量的访问接口
	{
		return myval;
	}
	static int *myvaladdr()
	{

		return &myval;
	}
	private:
	int val;
	static int myval;//静态成员变量,类的成员,与对象无关
	};
	 int Std::myval=123;//static成员变量使用前必须在类的外部声明定义初始化

int main(int argc, char *argv[])
{
	Std obj;
	obj.setval(10);
cout<<obj.getval()<<endl;
cout<<obj.getmyval()<<endl;
cout<<Std::getmyval()<<endl;//静态成员的访问;类名::成员。
cout<<obj.myvaladdr()<<endl;
cout<<Std::myvaladdr()<<endl;//static也是类共享的
	
	return 0;
}

二.C中const关键字的用法

1)修饰变量,变量是只读变量,即变量只能初始化,不能被修改
	eg:
const int val = 123;//初始化
			val = 321;//error
2)const修饰指针
const int *p;//不能通过指针p修改p指向的内容 等价:int const *p;
		int * const p;//不能修改p的指向
		const int * const p;//既不能通过指针p修改p指向的内容,也不能修改p的指向

2.C++中const用法
1)const修饰成员变量:必须使用初始化列表初始化
例:

  #include <iostream>

    using namespace std;

    class Demo{
        public:
            Demo(int val=0,int val1=0) : val1(val1),val(val)  //使用初始化列表对成员变量val val1初始化
            {
                this->val = val;//赋值
                //this->val1 = val1; //const成员是只读的,只能初始化,不能修改
                cout << __func__ << ":" << __LINE__ << endl;
            }

            ~Demo()
            {
                cout << __func__ << ":" << __LINE__ << endl;
            }
        public:
            void setval(int val)
            {
                this->val = val;

                return ;
            }

            int getval()
            {
               
                return this->val;
            }

            int getval1() 
            {
                return this->val1;
            }

        private:
            int val;
            const int val1;//const成员变量
			
    };


    int main()
    {

        Demo obj(123,321);
        cout << obj.getval1() << endl;

        return 0;
    }
2)const修饰成员方法: 不能通过此方法修改对象
	即:
		const方法只能调用const方法
		const方法不能调用非const方法
		const方法可以修改static成员变量
例:
#include <iostream>

using namespace std;

class Demo{
    public:
        Demo(int val=0,int val1=0) : val1(val1),val(val)  //使用初始化列表对成员变量val val1初始化 重点:不能通过初始化列表对static成员变量初始化
        {
            this->val = val;//赋值
            //this->val1 = val1; //const成员是只读的,只能初始化,不能修改
            cout << __func__ << ":" << __LINE__ << endl;
        }

        ~Demo()
        {
            cout << __func__ << ":" << __LINE__ << endl;
        }
    public:
        void setval(int val)
        {
            this->val = val;

            return ;
        }

        int getval() const  //const成员方法:不能修改类对象
        {
            //val++;//error 
            //setval(666);//error 原因:const方法不能调用非const方法,因为非const方法有可能修改类对象
            getval1();//right 原因:const方法可以调用const方法
            myval++;//right 原因:myval是static成员,不属于对象
            return this->val;
        }

        int getval1() const
        {
            return this->val1;
        }

    private:
        int val;
        const int val1;//const成员变量
		static int myval;
};
int Demo::myval = 123;

int main()
{

    Demo obj(123,321);
    cout << obj.getval1() << endl;

    return 0;
}
3)const修饰对象:表示对象是只读,即对象不能被修改
	const对象只能调用const方法
	const对象也可以调用static方法
	const对象不能调用非const方法
	
	eg:
  #include <iostream>

        using namespace std;

        class Demo{
            public:
                Demo(int val=0,int val1=0) : val1(val1) //使用初始化列表对成员变量val val1初始化
                {
                    this->val = val;//赋值
                    //this->val1 = val1; //const成员是只读的,只能初始化,不能修改
                    cout << __func__ << ":" << __LINE__ << endl;
                }

                ~Demo()
                {
                    cout << __func__ << ":" << __LINE__ << endl;
                }
            public:
                void setval(int val)
                {
                    this->val = val;

                    return ;
                }

                int getval() const  //const成员方法:不能修改类对象
                {
                    //val++;//error 
                    myval++;//right 原因:myval是static成员
                    return this->val;
                }

                int getval1() const
                {
                    return this->val1;
                }

                static int getmyval()
                {
                    return myval;
                }

            private:
                int val;
                const int val1;//const成员变量
                static int myval;//static成员

        };

        int Demo::myval = 123;

        int main()
        {

            const Demo obj;//const对象

            //obj.setval(666);//error obj是const对象,只能调用const方法

            cout << obj.getval() << endl;//right const对象可以调用const方法
            cout << obj.getmyval() << endl;//right getmyval()是static方法,是类的成员

            return 0;
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值