精华内容
下载资源
问答
  • 常成员函数的作用
    千次阅读
    2018-06-27 16:54:38

    初学c++,尤其是从c语言转过来学习c++的人,比如我,刚开始始终没弄懂成员函数的作用。比如下面的例子就很好的解释了成员函数的作用。


    #include<iostream>
    using namespace std;//c++的命名空间
    class circle
    {
    public:
    	double r;
    	double pi = 3.1415926;
    	double area = pi*r*r;
    };
    
    // 2010编译不通过 但是在2013编译器能编译通过
    int main()
    {
    	circle c1;
    	cout << "please input your r" << endl;
    	cin >> c1.r;
    
    	cout << c1.area << endl;	//乱码
    
    	system("pause");
    	return 0;
    }
    一看,没什么问题,但结果是个随机值。原因是刚开始  定义了一个类 c1;进行初始化,r和area 都是一个随机值。
    circle c1;

    随后输入 r; r已经得到了初始化,但是

    area = pi*r*r;  // 这句话并没有执行,所以,area 还是一个随机值。

    如果有成员函数,通过调用成员函数,就可以解决这样的问题。

    double getArea(double r)

    {

        area = pi*r*r;

        return area;  

    }



    更多相关内容
  • 静态成员函数作用

    千次阅读 2020-11-23 16:56:48
    静态成员函数主要为了调用方便,不需要生成对象就能调用。 比如: class X ...静态成员函数作用基本上相当于:一个带有命名空间的全局函数。 如一个数学类定义了一些函数 都可以声明伪静态的 Ma...
    静态成员函数主要为了调用方便,不需要生成对象就能调用。
    比如:
    class X
    {
     public:
       void MethodA();
       static void MethodB();
    }

    此时MethodB可以直接调用,X::MethodB();
    MethodA必须先生成类对象才能调用,X x; x.MethodA();

    函数的行为对所有派生类都一致时,可以声明为静态。

    静态成员函数的作用基本上相当于:一个带有命名空间的全局函数。 

    如一个数学类定义了一些函数 都可以声明伪静态的 Math.sin(x)等,使用静态成员函数好处很多,但所有的好处都是基于:它跟类的实例无关,只跟类有关,不需要this指针

    至于可重入问题,非静态成员函数也有啊。为什么单单问静态函数的可重入问题。

    比如:

    (1)可以实现某些特殊的设计模式:如Singleton;

    (2)由于没有this指针,可以把某些系统API的回调函数以静态函数的形式封装到类的内部。因为系统API的回调函数通常都是那种非成员函数(孤立函 数),没有this指针的。比如你可以在类的内部写一个线程函数供CreateThread创建线程用,如果没有静态函数,那么这种回调函数就必须定义成 全局函数(非静态成员函数指针无法转换成全局函数指针),从而影响了OO的“封装性”。

    (3)可以封装某些算法,比如数学函数,如ln,sin,tan等等,这些函数本就没必要属于任何一个对象,所以从类上调用感觉更好,比如定义一个数学函数类Math,调用Math::sin(3.14);如果非要用非静态函数,那就必须:Math  math;    math.sin(3.14);

    行是行,只是不爽:就为了一个根本无状态存储可言的数学函数还要引入一次对象的构造和一次对象的析构,当然不爽。而且既然有了对象,说不得你还得小心翼翼的定义拷贝构造函数、拷贝赋值运算符等等,对于一些纯算法的东西显然是不合适的。

     

    (4)总之,从OOA/OOD的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的。

            以上只是一些基本的考虑,并不是绝对的。绝对东西的只有一点:“静态函数不需要实例化就可以被调用,不会也不可以调用或操纵非静态成员”。记住这一点,那么实际编程中何时需要用,何时适合用,自然就更容易作出决定了。

    展开全文
  • c++静态成员函数作用

    千次阅读 2019-06-18 14:08:22
    静态成员函数主要为了调用方便,不需要生成对象就能调用。 比如: class X { public: void MethodA(); static void MethodB(); } 此时MethodB可以直接调用,X::MethodB(); MethodA必须先生成类对象才能调用...
    静态成员函数主要为了调用方便,不需要生成对象就能调用。
    比如:
    
    class X
    {
    public:
        void MethodA();
        static void MethodB();
    }

    此时MethodB可以直接调用,X::MethodB();
    MethodA必须先生成类对象才能调用,X x; x.MethodA();


    函数的行为对所有派生类都一致时,可以声明为静态。

    静态成员函数的作用基本上相当于:一个带有命名空间的全局函数。 

    如一个数学类定义了一些函数 都可以声明伪静态的 Math.sin(x)等

     

    好处很多,但所有的好处都是基于:它跟类的实例无关,只跟类有关,不需要this指针

    至于可重入问题,非静态成员函数也有啊。为什么单单问静态函数的可重入问题。

    比如:

    (1)可以实现某些特殊的设计模式:如Singleton;

     

    (2)由于没有this指针,可以把某些系统API的回调函数以静态函数的形式封装到类的内部。因为系统API的回调函数通常都是那种非成员函数(孤立函 数),没有this指针的。比如你可以在类的内部写一个线程函数供CreateThread创建线程用,如果没有静态函数,那么这种回调函数就必须定义成 全局函数(非静态成员函数指针无法转换成全局函数指针),从而影响了OO的“封装性”。

     

    (3)可以封装某些算法,比如数学函数,如ln,sin,tan等等,这些函数本就没必要属于任何一个对象,所以从类上调用感觉更好,比如定义一个数学函数类Math,调用Math::sin(3.14);如果非要用非静态函数,那就必须:Math  math;    math.sin(3.14);

    行是行,只是不爽:就为了一个根本无状态存储可言的数学函数还要引入一次对象的构造和一次对象的析构,当然不爽。而且既然有了对象,说不得你还得小心翼翼的定义拷贝构造函数、拷贝赋值运算符等等,对于一些纯算法的东西显然是不合适的。

     

    (4)总之,从OOA/OOD的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的。

            以上只是一些基本的考虑,并不是绝对的。绝对东西的只有一点:“静态函数不需要实例化就可以被调用,不会也不可以调用或操纵非静态成员”。记住这一点,那么实际编程中何时需要用,何时适合用,自然就更容易作出决定了。

    展开全文
  • C++ 数据成员、常成员函数对象

    千次阅读 多人点赞 2019-01-04 23:54:51
    ① 首先,常成员函数内部不允许进行数据成员的修改,但是可以在函数内部输出const数据成员与非数据成员! ② 其次,还可以区分同名构造函数,举个例子(如下): #include using namespace std; class ...

    首先给出一个例子简单理解const修饰数据变量的基本工作原理:

    #include <stdio.h>
    
    int main()
    {
    	const int a = 250;
    	int *ptr = (int *)&a;
    	*ptr = 360;
    	printf("*ptr = %d\n",*ptr); 
    	printf("ptr = %p\n",ptr); 
    	printf("a = %d\n",a);
    	printf("&a = %p\n",&a);
    	return 0;
    } 

    运行结果:

    从运行结果来看,显然我们队地址所指向内存的数据的修改并没有作用到a身上,这也就从另外一方面直接表明了对a的访问不是通过访问内存的方式。

    那么这里const对int a的修饰可以理解为#define a 250 ,但是使用const还可以保存相应的数据类型信息(a++==251)

     

    接下来主要讲到const对C++中类的成员以及对象的修饰:

    ************************************************************************************************************************************

     

    一:常数据成员

    1. 首先我们定义一个Point类:

    class Point
    {
    private:
    	int x, y;
    	const int e;
    	static int count;
    public:
    	Point(int xx, int yy,int ee):e(ee),x(xx),y(yy)
    	{
    		count++;
    	}
    	void Show_C()
    	{
    		cout << "C = " << c << endl;
    		//cout << "D = " << d << endl;  //这里就已经没有访问权限了
    	}
    	static int Show_Count()
    	{
    		return count;
    	}
    	int c = 250;
    	const int d = 360;    //可以直接在声明的时候赋值
    };

    ① 我们可以在定义const变量的时候直接对其进行赋值,赋值过后便无法再对它进行各种"计算"操作;

    ② 如果不在定义的时候赋值,那就需要在该类的构造函数中使用初始化列表进行赋值(初始化):

      

    在类的一般函数成员中依然可以访问const类型的数据成员。

    那常成员函数有什么用呢?

     

     

    二:常成员函数

    ① 首先,常成员函数内部不允许进行数据成员的修改,但是可以在函数内部输出const数据成员与非数据成员!

    ② 其次,还可以区分同名构造函数,举个例子(如下):

    #include <iostream>
    using namespace std;
    
    class Test
    {
    public:
    	void Show()const
    	{
    		cout << "Hello,Const!" << endl;
    	}
    	void Show()
    	{
    		cout << "Hello!" << endl;
    	}
    };
    
    int main()
    {
    	Test t1;
    	t1.Show();
    	Test const t2;
    	t2.Show();
    	return 0;
    }

     

     

    三:常对象

    在类的实例化同时,加上const进行修饰实例化出的对象即可:

    const修饰对象,直接限制了对象对其内部非const成员的访问,也就是说如果类中的数据成员与函数成员都没有被const修饰,

    那么实例化出的对象将无法对类进行操作;

    当然,const对象是可以直接操作const成员的(数据成员、函数成员),所以这就需要我们把成员函数声明为const型;

    #include <iostream>
    using namespace std;
    
    class Point
    {
    private:
    	int x, y;
    	const int e;
    	static int count;
    public:
    	Point(int xx, int yy,int ee):e(ee),x(xx),y(yy)
    	{
    		count++;
    	}
    	void Show_C()const   //常函数内部无法对数据进行修改
    	{
    		cout << "C = " << c << endl;
    		cout << "D = " << d << endl;
    	}
    	static int Show_Count()
    	{
    		return count;
    	}
    	int c = 250;
    	const int d = 360;    //可以直接在声明的时候赋值
    };
    
    int Point::count = 0;
    
    int main()
    {
    
    	Point const P1(1, 2, 3);    //这里的const直接限制了在外部对类中public中数据成员的修改
    
    	cout << P1.d << endl;    //const int d = 360;
    
    	P1.Show_C();
    
    	return 0;
    }

     

     

     

     

     

     

     

     

     

    展开全文
  • C++:常成员函数

    2021-12-16 20:30:32
    常成员函数:函数后面添加const。
  • 常成员函数中,你不能改变数据成员的值,你也不能在常成员函数中调用非常量成员函数,因为你不确定你调用的那个非常量成员函数是否改变了数据成员的值,如果改变了,那就相当于在常成员函数里改变了数据成员,与...
  • C++类成员函数后面加const有什么作用

    千次阅读 2021-04-08 21:31:12
    C++中类成员函数后面加const的作用,这个问题频繁出现在面试中,从我参加过的几次面试中都被涉及到,比如字节,2345浏览器等,这个问题会非常基础,而且很考验C++的基础。const的字面意思为常数,不变的,只读。 ​...
  • C++类的成员函数

    千次阅读 2021-06-08 10:00:48
    类的成员函数是函数的一种,它的用法和作用和一般函数基本上是一样的,它也有返回值和函数类型。它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为private(私有的),public(公用的)...
  • 类的成员函数

    千次阅读 2020-11-12 11:42:55
    前者与普通函数不同的是,实现成员函数时要指明类的名称,具体形式为: 返回值类型 类名::函数成员名(参数表){函数体}; 而后者一般为一些短小的函数(5行以内),也就是内联函数。 所属关系 各类函数中:构造...
  • 静态数据成员和静态成员函数

    万次阅读 多人点赞 2018-08-26 19:18:35
    c++中的static静态数据成员和静态成员函数应该是让大家比较头疼的东西,好像也是找工作公司面试中常常问到的东西。我自己也深有体会,在学习c++的过程中,总感觉static很烦人,但是又是一个必须懂的东西,所以今天就...
  • 类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为private(私有的...
  • Python:普通成员函数、类成员函数、静态函数 Python 中的类也是一个普通对象,如果需要直接使用这个类,例如将类作为参数传递到其他函数中,又希望在实例化这个类之前就能提供某些功能,那么最简单的办法就是使用 ...
  • C# 成员变量和成员函数前加static的作用? 它们被称为成员变量和常成员函数,又称为类成员变量和类成员函数。 分别用来反映类的状态。 比如类成员变量可以用来统计类实例的数量,类成员函数 负责这种统计的动作。...
  • C++ 类的成员函数

    千次阅读 2020-04-07 17:10:42
    C++ 类的成员函数一、普通成员函数二、构造函数三、析构函数四、拷贝构造函数 一、普通成员函数 1、普通成员函数的声明 普通成员函数必须在类中声明,声明方式与声明普通成员函数的方式一样 class People { public...
  • c++类成员函数做函数参数

    千次阅读 2020-10-26 17:47:29
    类内部的typedef函数声明,属于类成员,在类外声明时必须加类声明作用域(Test::FUNC),且赋值的函数必须为类成员(&Test::Func1) 下面的类中,Func1和Func2的返回值类型和参数列表都一样,定义的FUNC类似委托类型...
  • c++私有成员函数 私人会员功能 (Private Member Function) A function declared inside the class's private section is known as "private member function". A private member function is accessible through the...
  • #include<iostream> using namespace std; class person {public: static void func() { cout <... "func的调用" <...//在类外初始化的,并且在初始化的时候一定要加作用域!!!!! void test01() {
  • C++中在类外部定义的成员函数

    千次阅读 多人点赞 2020-10-14 10:22:21
    类的成员函数可以在类内部定义,也可以在类的外部定义。当定义在类的外部时,需要同时提供类名和函数名。 1 类外部定义成员函数 代码如下所示 classMyClass{ voidmyFunc(); inti; }; voidMyClass::myFunc() { ...
  • C/C++编程:成员函数的调用方式

    千次阅读 2021-05-05 17:11:49
    问题:对于Point3d指针和对象的函数调用 Point3d obj Point3d *ptr = &obj; obj.normalize(); ptr->normalize() 会发生什么事情呢?其中normalize()定义如下: Point3d Point3d::normalize() const{ float...
  • 成员函数指针

    千次阅读 2018-09-29 20:38:02
      函数指针中的函数都是全局作用域内的函数,而成员函数指针指向的函数往往都是某个类的非静态成员函数。使用如下代码,编译器会报非法转换的错误。报这个错有俩个原因 首先类内的函数是在类作用域中的,而函数...
  • 成员变量和成员函数前加static的作用?答:它们被称为成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。 ...
  • 类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为private(私有的...
  • 即因为一个类的静态成员函数调用了类的非静态成员变量,而报错。 下面具体介绍一些相关知识点,以防下次再出错。 类成员函数当回调函数的方法 参考自:...
  • 成员函数:无论静态函数还是非静态函数,都是属于类的(这一点与数据成员的静态非静态不同),对象并不拥有函数的拷贝.两者的区别在于:非静态的函数由类对象(加.或指针加-&gt;;)调用,这时将向函数传递this指针.而静态...
  • 成员函数的定义

    千次阅读 2020-05-06 17:03:55
    成员函数的定义 如上所述, 类中含有两种成份,即数据成员和成员函数, 其中成员函数也称方法。实际上,成员函数和方法指的是同一种实体, 是一种实体的两种不同叫法, 成员函数是程序设计语言 C + + 中的术语,而方法是...
  • 普通成员函数和静态成员函数

    千次阅读 2018-03-25 19:47:25
    类成员包括数据成员和成员函数。 两者区别 1分配内存的时间不同 静态成员属于类本身,不属于具体类对象,在类加载时分配内存空间,程序结束时才消失。可以类名直接访问。 普通成员属于类对象,在类对象创建...
  • C++的静态成员变量和静态成员函数

    万次阅读 2019-05-22 15:35:41
    与普通的成员变量和成员函数相比,静态成员函数和静态成员变量是属于类的,而不是属于对象的,也就是说,在类实例化为对象之前,静态成员变量和静态成员函数就已经分配了内存空间了,而普通成员函数和成员变量只有在...
  • C++ 运算符重载:成员、非成员函数重载

    千次阅读 多人点赞 2020-06-19 19:41:34
    C++ 运算符重载运算符重载1、背景2、运算符函数重载的两种形式1、成员函数重载1、定义格式2、非成员函数重载(友元)1、定义格式3、重载原则4、参数和返回值5、成员函数重载1、双目运算符重载1、定义2、调用格式2、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 493,764
精华内容 197,505
关键字:

常成员函数的作用