高分请教几个小问题 -- 急

时间:2022-06-07 17:36:51
请教:
1.在类里静态函数与一般函数的区别什么时候用静态函数?
例如:
Class aaa
{
     static void test() ;
}

class aaa
{
     void test() ;
}
的区别?

2.若每个实例都有自己的绶冲区,应该是:
 class aaa
 { 
      aaa(){ buf = new char[SIZE] ; } 
      char* buf ;
 }
 还是
 class aaa
 {
      char buf[SIZE] ;
 }
 两种方法有什么不同?

3.类里创建的线程是否在其实例析构时自动结束?(设线程是无限循环)
 若不能,应怎样结束它? 类的线程操作类的成员变量时需要用临界区吗?
 
每个问题30分(可再加),积极参与者也有分


10 个解决方案

#1


1.静态函数只能存取类的静态变量,静态函数不能使用this指针

2。两个都可以,但是第二种可能更安全,当然第一种如果定义了比较好多拷贝构造函数的话也是很安全的

#2


有时需要为某个类的所有对象分配一个单一的存储空间。在C中,可以用全局变量,但这样很不安全。全局数据可以被任何人修改,而且,在一个项目中,它很容易与其他的名字相冲突,如果可以把一个数据当成全局变量那样去存储,但又被隐藏在类的内部,并且清楚地与这个类相联系,这种处理方法当然最理想的了。这一点可以用类的静态数据成员来实现。

#3


各位高手能再说详细点吗?

#4


我觉得静态成员函数只能存取静态变量
 若在类里把线程的处理函数定义为静态,则它不会存取其它变量以引起冲突(由编译器检查)


class aaa
{
    HANDLE hThread = CreateThread(..., ThreadProc, ...) ;
    static DWORD WINAPI ThreadProc()
    {  dosomething() ;  // Can't access aaa's non-static member here
                       // in case of violation.
    }
}

#5


1.静态函数一般只存取类的静态变量,例如用于类的实例的计数。
2.第一个用堆,第二个用栈吧
3.线程在其运行函数返回时结束。当然也可强行结束。要不要临界区要看你对数据操作的要求,不冲突就可以。


#6


静态成员函数是指在类中操作,不是实例的操作,不能引用this指针

#7


针对第二个问题。个人认为,第一种使用指针,操作时涉及到指针的赋值,定向,空间释放等一系列问题。要求有一定的指针操作技巧。而后者则是数组,一旦形成对象,空间就确定了,操作比较容易。怎么使用就看你自己了。

#8


同意楼上,前者有释放问题!

#9


帮你up一下

#10


regarding (1)

静态函数只能存取类的静态变量 -- not exactly. static member function *can* read and write non-static member data if the object is given (though this use of static function is not very often seen). example:

class A
{
    private:  int a;
    public:   static void f( A* aa) { aa->a = 1; }
}

...

A kkk;
A::f( &kkk );     // 'kkk's a is set to '1'.


2. 两种方法有什么不同?
in the 1st case, 'buf' is in the heap, while it is in the stack in the 2nd case. 

if 'SIZE' is very large, you have to make 'buf' allocated in the heap.

#1


1.静态函数只能存取类的静态变量,静态函数不能使用this指针

2。两个都可以,但是第二种可能更安全,当然第一种如果定义了比较好多拷贝构造函数的话也是很安全的

#2


有时需要为某个类的所有对象分配一个单一的存储空间。在C中,可以用全局变量,但这样很不安全。全局数据可以被任何人修改,而且,在一个项目中,它很容易与其他的名字相冲突,如果可以把一个数据当成全局变量那样去存储,但又被隐藏在类的内部,并且清楚地与这个类相联系,这种处理方法当然最理想的了。这一点可以用类的静态数据成员来实现。

#3


各位高手能再说详细点吗?

#4


我觉得静态成员函数只能存取静态变量
 若在类里把线程的处理函数定义为静态,则它不会存取其它变量以引起冲突(由编译器检查)


class aaa
{
    HANDLE hThread = CreateThread(..., ThreadProc, ...) ;
    static DWORD WINAPI ThreadProc()
    {  dosomething() ;  // Can't access aaa's non-static member here
                       // in case of violation.
    }
}

#5


1.静态函数一般只存取类的静态变量,例如用于类的实例的计数。
2.第一个用堆,第二个用栈吧
3.线程在其运行函数返回时结束。当然也可强行结束。要不要临界区要看你对数据操作的要求,不冲突就可以。


#6


静态成员函数是指在类中操作,不是实例的操作,不能引用this指针

#7


针对第二个问题。个人认为,第一种使用指针,操作时涉及到指针的赋值,定向,空间释放等一系列问题。要求有一定的指针操作技巧。而后者则是数组,一旦形成对象,空间就确定了,操作比较容易。怎么使用就看你自己了。

#8


同意楼上,前者有释放问题!

#9


帮你up一下

#10


regarding (1)

静态函数只能存取类的静态变量 -- not exactly. static member function *can* read and write non-static member data if the object is given (though this use of static function is not very often seen). example:

class A
{
    private:  int a;
    public:   static void f( A* aa) { aa->a = 1; }
}

...

A kkk;
A::f( &kkk );     // 'kkk's a is set to '1'.


2. 两种方法有什么不同?
in the 1st case, 'buf' is in the heap, while it is in the stack in the 2nd case. 

if 'SIZE' is very large, you have to make 'buf' allocated in the heap.