C语言的类的问题!

马少华 2008-05-30 05:00:05

class CTest
{
......
}

CTest m_Test;
CTest *m_pTest;
CTest *m_pTest = new CTest();

这三种形式有什么区别?各在什么情况下使用。
C++中支持这样的形式么?
CTest m_Test = new CTest()
请指教!
...全文
120 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
指针可以理解为引用,具体看Java与c++的用法和区别。千万别把Java与C++混淆了。
马少华 2008-06-01
  • 打赏
  • 举报
回复
up
马少华 2008-05-31
  • 打赏
  • 举报
回复
那引用一样也可以啊,指针还相比引用有那些优点啊?
maplewasp 2008-05-31
  • 打赏
  • 举报
回复
不可以,程序会出错的!!

“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种:

一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。

二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。例:

char *p = (char *) malloc(100);

strcpy(p, “hello”);

free(p); // p 所指的内存被释放,但是p所指的地址仍然不变

if(p != NULL) // 没有起到防错作用

strcpy(p, “world”); // 出错
well4u 2008-05-31
  • 打赏
  • 举报
回复
我的理解是利用指针可以访问到同一个对象,而使用具体类型不行,除非使用引用。
比如:

typedef struct
{
int a;
int b;
}S_A;

void f1(S_A *psA)
{
if(NULL!=psA)
{
psA->a=1;
psA->b=2;
}
}

void f2(S_A sa)
{
sa.a=1;
sa.b=2;
}

void main(void)
{
S_A s1;
S_A s2
f1(&s1);//传递指针
f2(s2); //传递类型

}


可以看到f1修改了s1实例的内容,而f2并没能修改s2的内容,因为对于f1中的psA其指向的位置
就是s1的位置,而f2中的sa是一个临时变量,与s2的地址不同,所以不能修改。
马少华 2008-05-31
  • 打赏
  • 举报
回复
哦,明白了一些,
什么时候用成员变量?什么时候用指针变量啊?
马少华 2008-05-30
  • 打赏
  • 举报
回复
还有啊,野指针可以调用类的成员吗?
马少华 2008-05-30
  • 打赏
  • 举报
回复
各自在什么情况下使用呢?
ouyh12345 2008-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bobob 的回复:]
第一种,定义了一个对象
第二种,定义了一个野指针
第三种,定义了一个指针的同时创建了一个类的实例

这就是c++中的写法。
[/Quote]

CTest m_Test = new CTest()
这是java或C#的语法
xkyx_cn 2008-05-30
  • 打赏
  • 举报
回复
CTest m_Test = new CTest()
不支持, 左边需要对象的指针类型
sukyin 2008-05-30
  • 打赏
  • 举报
回复
楼主还是好好看看书吧。
bobob 2008-05-30
  • 打赏
  • 举报
回复
第一种,定义了一个对象
第二种,定义了一个野指针
第三种,定义了一个指针的同时创建了一个类的实例

这就是c++中的写法。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧