精华内容
下载资源
问答
  • 比如类Book中有个函数声明 void (*func)(int); 请问我在类外定义这个函数时,函数怎么写? 是void Book::(*func)(int)吗?
  • 4.如何定义以及访问的方式与普通成员变量和普通成员函数的区别? 5.是怎么分配内存的? 当调用一个对象的非静态成员函数时,系统会把该对象的起始地址赋给成员函数的this指针。而静态成员函数并不属于某一对象(所有...

    相关文章

    1.静态成员变量和静态成员函数诞生顺序,以及为什么诞生(使用场景)?
    2.有无this指针?
    3.和类以及对象的关系?
    4.如何定义以及访问的方式与普通成员变量和普通成员函数的区别?
    5.是怎么分配内存的?
    当调用一个对象的非静态成员函数时,系统会把该对象的起始地址赋给成员函数的this指针。而静态成员函数并不属于某一对象(所有对象共有,没有this指针,不能访问本类中非静态成员,有点惨),它与任何对象都无关。
    可以说静态成员函数的出现就是为了处理静态成员变量的。
    在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。


    静态成员的声明要加个关键static。静态成员可以通过双冒号来使用即<类名>::<静态成员名>,非静态成员则不能
    static成员变量属于类(被存放在数据段中),不属于某个具体的对象(具体对象的内存是分配在堆中的),即使创建多个对象,也只为该变量分配一次内存,所有对象使用的都是这份内存中的数据。若它为public类型,当某个对象修改了它,也会影响到其他对象,所有对象都是“同甘共苦的”


    c++规定const静态类成员可以直接初始化,其他非const的静态类成员需要在类外初始化,且不能使用static关键字。我们一般选择在类的实现文件中实现它(定义(为其分配内存),初始化)。


    例子:C++ Primer关于静态成员举了个例子,是说一个银行账户类需要一个数据成员来表示当前的利率。在这个类中,我们所希望的是利率与类相关联,而不是与类的每个对象相关联。这个时候就可以用静态成员函数,可以提高效率,而且一旦利率浮动,每个对象也能相应使用新的值。

    静态变量通过类来调用,也可以通过具体对象来调用,但非静态变量只能通过具体对象来调用

    //如下,静态:
    A::func(); 
     //或
    A a;
    a.func();
    //非静态只有:
    A a;
    a.func();

     

    展开全文
  • 一个的静态成员,是所有对象共享的,分配空间也是进程执行时,一开始就...而一个的静态成员函数里,定义的变量是怎么样的呢?是不是也是所有对象共享呢?的静态函数和的成员变量一样,也是 进程执行时,一开始就分

    一个类的静态成员,是所有对象共享的,分配空间也是在进程执行时,一开始就分配了,以后固定而不会再分配空间的.

    类的静态成员变量和类外全局变量的区别是,可以设定访问标志,只允许类的对象访问.如果类里定义public的静态变量,那么和类外的全局变量就没什么区别.

    而一个类的静态成员函数里,定义的变量是怎么样的呢?是不是也是所有对象共享呢?
    类的静态函数和类的成员变量一样,也是 在进程执行时,一开始就分配了控件存放这段代码,然后提供一个函数的地址入口,供所有对象或其它什么代码调用,静态函数是不允许调用类的普通变量,只能访问类的静态变量.因为它没有获得对象的this指针.静态函数的好处就是可以直接用类名加点来调用,不用专门去分配空间产生一个实例对象,才能调用.

    而每次调用静态函数时,进程同样要将其压入栈内,并在栈内为静态函数里定义的变量分配一次空间,每调用静态函数一次,都要这样分配静态函数的局部变量.

    因此静态函数里定义的变量都是独立的,

    那么如果静态函数里又定义了一个静态变量呢?事实告诉我们,静态函数里是不允许再定义静态变量的.因为这样做毫无意义,既然你想让所有的对象和函数共享该变量,就把它定义为类的静态变量就行了.

    展开全文
  • 友元函数和友元~

    2017-04-29 17:55:00
    1.友元函数在类内声明,但是但不属于类的成员函数(所以在类外定义定义的时候不可以加上作用域限定符【::】)。可以在类内的任何地方声明,不受访问控制符的限制(不是类内的成员函数当然就不受限制) 2.友元函数...

    我们知道类内的私有成员是不能被类外访问的,但是总会有时候有这个需求去访问,那怎么办到类外可以去访问到类内的数据成员呢?这时就出现了友元函数和友元类。

    ①友元函数:

    1.友元函数在类内声明,但是但不属于类的成员函数(所以在类外定义定义的时候不可以加上作用域限定符【::】)。可以在类内的任何地方声明,不受访问控制符的限制(不是类内的成员函数当然就不受限制)

    2.友元函数可以是普通函数,也可以是其他类的成员函数。

    3.通过友元函数去访问类内的成员的时候,要通过参数传递该类的对象来进行,具体形式是用对象名或对象指针去访问类的数据成员。

    4.友元函数的声明方式:

    First: 当友元函数是普通函数的时候。——friend void 友元函数名 ( 把它当朋友的类的类名 对象名 )  {};

    Second:当友元函数是其他类的成员函数的时候。——friend void 其他类名::友元函数名(把它当朋友的类的类名 对象名){};

    5.思考终究话题(笑哭),友元函数存在的意义是什么?

    至少对于我而言,如果这个友元函数只是一个普通函数,与其它类一点关系都没有的时候,我觉得这是没有什么意义的。(这个想法现在不对了)

    友元函数作为普通成员函数的意义是可以直接用函数名去调用,而不是用对象去调用,因为有时候这个函数的返回值并不希望是另一个对象的函数

    见下例:

    #ifndef _WOSHILEIA_H_
    #define _WOSHILEIA_H_
    #include
    using namespace std;
    class Integer
    {
    public:
    	Integer(int num);
    	~Integer(void);
    	void GetInteger(void);
    	friend int SumInteger(Integer a, Integer b);  //定义友元函数可以是这个函数被调用的时候只要给到函数名,不用是某个对象的函数
    				 //这大概就是普通函数做友元函数的意义吧
    	//static int SumInteger(Integer a, Integer b); //定义静态成员函数也可以使这个函数被调用的时候不用用对象去调用,而是用类名去调用
    private:
    	int value;
    	static int sum;
    };
    #endif
    #include"woshileia.h"
    int Integer::sum = 0;
    Integer::Integer(int num)
    {
    	value = num;
    	
    }
    Integer::~Integer(void){};
    void Integer::GetInteger(void)
    {
    	cout << "value=" << value << endl;
    }
    int SumInteger(Integer a, Integer b)
    {
    	Integer::sum = a.value + b.value;
    	return Integer::sum;
    }
    #include"woshileia.h"
    #include
    int main(void)
    {
    	Integer a(3), b(5);
    	cout<<"sum="<

    在友元函数是其他类的成员函数的时候,和友元类的成员函数的时候,意义是——在其他类里可以去访问类内的数据成员。


    ②友元类

    声明方式见如下代码:

    #include
    using namespace std;
    #include
    class distance;//因为我们要把distance声明成CPoint的友元类,所以先要告诉编译器distance是一个类。
    class CPoint
    {
    public:
    	CPoint(int xx, int yy)
    	{
    		x = xx;
    		y = yy;
    	}
    	friend class distance;//将distance声明成CPoint的友元类  的格式
    private:
    	int x, y;
    };
    class distance
    {
    public:
    	double point_to_oralpoint(CPoint p1) //可以通过参数为CPoint的类的对象去访问CPoint中的数据成员
    	{
    		return sqrt(p1.x*p1.x + p1.y*p1.y);
    	}
    };

    B为A的友元类,那么B中的每一个函数都是A的友元函数,也就都满足上面说的那些性质了。

    展开全文
  • ``` #include using namespace std; class StaticMemberTest{ ...1.既然sci可以接收初始值,是否代表了它即被声明也被...2.如果main函数为空的话,上面的类内初始化是没有问题的,我应该怎么在类外使用sci变量呢?
  • qt怎么使用ui中的控件 Ui界面中修改了控件对象名之后,必须在main...并且在类外直接定义MainWindow的对象并调用其成员,程序虽然能编译但却无法运行,自己也是遇到了很多次这种情况,具体原因没去细看。 3/5 类外...

    qt怎么使用ui中的控件

    Ui界面中修改了控件对象名之后,必须在main函数中重新打一遍实现代码,不然代码不会编译通过,因为它当时对这个名字使用的组件就不同。
    1/5
    QT中自己定义的函数,不能直接调用MainWindow类和UI类中的成员。

    2/5
    并且在类外直接定义MainWindow的对象并调用其成员,程序虽然能编译但却无法运行,自己也是遇到了很多次这种情况,具体原因没去细看。

    3/5
    类外函数若想直接调用UI的控件,只要将UI的指针做外参数传入类外函数即可。

    4/5
    传递mainwindow的指针作为父指针或者加一个引用参数,都可以访问到UIdesigner生成的UI控件,通常设计上不建议这么做。

    5/5
    因为可以在设计的时候绑定控件的signal到外部,没必要在与UI无关的层次中擅自改变UI的行为或者表现。(通过调用触发函数,对Ui控件进行改动)
    也可以使用ui->修改Ui控件的行为。

    展开全文
  • 静态变量 静态函数

    2008-11-13 10:20:00
    一个的静态成员,是所有对象共享的,分配空间也是进程执行时,一开始就...而一个的静态成员函数里,定义的变量是怎么样的呢?是不是也是所有对象共享呢?的静态函数和的成员变量一样,也是 进程执行时,一开始就分
  • 1.构造函数  构造函数的作用就是... 构造函数也是成员函数,除了有成员函数的所有特征,还有一些不同之处:构造函数的函数名跟类名一样,而且没有返回值。构造函数一般被声明为公有函数,除非我们不允许某
  • #创建学生类Student,该类具有学号、成绩两个私有数据成员,在类外定义一个函数Max找出学生中成绩最高者并输出(要求:学生不少于5个;不允许通过类的公有成员函数访问数据成员) 要求把.h .cpp .cpp三个分开 #...
  • 头文件应该怎么

    千次阅读 2015-08-26 22:34:33
    因为一个对象只能定义一次,能够声明多次,所以头文件最重要的规则是只声明,不定义(除少数对象)。...头文件一般包含定义(不包含类定义外部的成员函数实现),extern变量声明,以及函数声明。要
  • C++,this指针

    2019-01-13 09:33:52
    中午在学习C++写例题代码的时候,发现在类外实现类的成员函数的时候,成员函数中除了形参之外,没有类中定义的私有成员变量,当时有疑问:只列举了函数的形参,那么成员函数怎么知道调用哪一个私有成员变量呢?...
  • 为什么进行继承 什么是继承 继承怎么做 继承的类型(实现继承只能由一个基类,接口继承可以有多个接口) ... 类成员的继承(派生继承基类除构造函数外的所有成员类成员的访问(派生能...
  • 一小时内学会 C#(txt版本)

    热门讨论 2009-08-19 18:09:37
    默认情况下存在一个全局命名空间,所以命名空间外定义直接进到此全局命名空间中,因而你可以不用定界符访问此类。 你同样可以定义嵌套命名空间。 Using #include 指示符被后跟命名空间名的 using 关键字代替...
  • Java基础:面向对象

    2021-04-05 12:04:42
    Java语言是面向对象程序"设计"语言 面向对象:强调的是"对象",偏重这件事找谁做,把自己比喻为"指挥者",单位:类 面向过程:强调的是"过程",偏重这...成员变量(全局变量):定义在类中方法的变量 实例变量:实例变量属于类
  • 平时工作中static关键字出现的地方挺多的,但是要我说出他们的用法跟区别...特点:和1差不多,定义多个static y,但只有一个y,不进入的大小计算,不依赖于对象的存在而存在(可直接调用,要进行外置声明) 4、修饰.
  • 方法(成员函数): 通过在类定义中声明函数,即创建了类的方法。 如: function somefun(参数列表) { ... ... } class Person { //下面是人的成员属性 var $name; //人的名字 var $sex; //人的性别 var $age; //人的...
  • 高质量C++编程指南

    2012-03-08 19:40:54
    8.2 成员函数的重载、覆盖与隐藏 59 8.3 参数的缺省值 62 8.4 运算符重载 63 8.5 函数内联 64 8.6 一些心得体会 67 第9章 的构造函数、析构函数与赋值函数 68 9.1 构造函数与析构函数的起源 68 9.2 构造函数的初始...
  • 高质量C++编程指南.zip

    2013-09-26 16:46:18
    8.2 成员函数的重载、覆盖与隐藏 60 8.3 参数的缺省值 63 8.4 运算符重载 64 8.5 函数内联 65 8.6 一些心得体会 68 第9章 的构造函数、析构函数与赋值函数 69 9.1 构造函数与析构函数的起源 69 9.2 构造函数的初始...
  • (2)结构中不允许定义成员函数,当是中可以定义成员函数. (3)结构不可以存在继承关系,当是可以存在继承关系. 3、 strcpy(), strcat(), strcmp,strlen(), strchr(), memcpy(), memcmp(), memset()的编写? 4...
  • c#学习笔记.txt

    2008-12-15 14:01:21
    与指向成员函数的 C 指针不同,委托同时封装对象实例和方法。委托声明定义 System.Delegate 派生的。委托实例封装一个或多个方法,每个方法都被称为可调用实体。对于实例方法,可调用实体由一个实例和该实例上...
  • 答:不是,其它数据类型转换到CString可以使用CString的成员函数Format来转换 7.C++中为什么用模板。 答:(1)可用来创建动态增长和减小的数据结构 (2)它是类型无关的,因此具有很高的可复用性。 (3)它编译...
  • MFC框架调用该函数的时候,重新定义它的状态和行为; 一般来说,应用程序可以通过以下两种途径来实现以上的方法: 1. 父窗口里,截获自身的或者由子元素(包括控件和菜单等元素)传递的关于界面绘制的消息; 2....
  • 疯狂JAVA讲义

    2014-10-17 13:35:01
    学生提问:既然内部是外部成员,是否可以为外部类定义子类,子类中再定义一个内部来重写其父中的内部? 211 6.7.4 局部内部 211 6.7.5 匿名内部 212 6.7.6 闭包(Closure)和回调 215 6.8 ...
  • java 面试题 总结

    2009-09-16 08:45:34
    知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以...
  • 1、根据SQL数据库生成实体文件,类似于SqlMetal和动软代码生成器,但是相比较SqlMetal简化了较多的不常用的函数(我认为的),成员变量支持数据库字段注释,一个表对应一个文件,不像sqlmetal如果数据库表和字段多了...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

怎么在类外定义成员函数