刚学C++,问几个非常简单的问题。(200分)

  • 主题发起人 主题发起人 远帆
  • 开始时间 开始时间

远帆

Unregistered / Unconfirmed
GUEST, unregistred user!
1、假如定义了class TA,那么
TA a()

TA a;
a=new TA();

TA a=new TA();
有什么区别?第一种方法是可以自动释放,而后面两种都须要delete d释放,对吗?
2、怎么可以看到从面板上拉下来的控件的类名呢?
比如我放了一个button,其ID为IDC_BUTTON1,我可以用
GetDlgItem(IDC_BUTTON1)->SetWindowText("aaa");改变它的标题,
我能不能用
XXX(类名)(GetDlgItem(IDC_BUTTON1)).caption="aaa";
来改变它的标题?
 
1 TA a()系统帮你释放
而后二种,因为你是new的,所在你必须显式的delete
2 查文件
 
既然第一种方式这么简单,什么情况下需要自已new?
 
第一种方式建立在stack上,stack空间有限。
new 出来的对象放在Heap上,这是一个很大的自由存储区.
 
1.作为数据类型,不论是一般的基本的数据类型还是复杂的那种
都有一种拷贝构造函数,例如 int i(4);
如果不写 默认的赋值是0;
所以 int i;
和 int i();
是不一样的后者调用了拷贝构造函数。
所以我们写程序的时候一定要会利用和实现拷贝构造函数
而后两者则是要分配空间的
前两种是不用分配空间的

2。你的后一种写法我是没有用过
不过应该是不可以的
delphi和c++的语法是不一样的
我说的语法是编译器而言的
是编译原理中的概念。
对于编译器要按照他定义好的语法来实现 啊
 
to chobits:
“而后两者则是要分配空间的
前两种是不用分配空间的”
不知你指的是什么?
使用GetDlgItem得到的是无类型的对象指针是吗?
那我怎么才能访问对象独有的方法或属性呢?
 
都要分配空间,Stack的空间由操作系统自动分配/释放,
Heap上的空间手动分配/释放。
C++的类型随便转,强制类型转换就行了。
 
可是我都不知道那个button控件是什么类?
在属性下拉列表中看到是这样:
IDC_BUTTON1(ButtonControl)IButtonEditor
可是好像没有ButtonControl这个对象的?
 
用CButton去强制转换就行了.
 
>TA a():
编译器为a在堆栈中分配空间,离开a的作用范围后,资源被自能回收。
你应该写成:
TA a;
>TA a;
>a=new TA();
>和
>TA a=new TA();
有个语法错误:TA a,申明的是实例,而new返回的是指针类型。
不能将指针赋给一个实例,如你能将进行 int a = new int;
吗?
你要写成: TA *a = new TA();
TA *a;
a = new TA();
这二者没有任何区别,由于C++可以就近申明变量,作用是一样的。
>有什么区别?第一种方法是可以自动释放,而后面两种都须要delete d释放,对吗?
new操作符在堆中为应用程序分配资源,只要你不释放,堆中就记录了你分配过这片空间。
你不释放它,就会一直占用着。
对于C++的new还要注意对数组型类型资源分配后的释放:
char a = new char[128];
delete[] a;
// 对数组型资源的释放。
>XXX(类名)(GetDlgItem(IDC_BUTTON1)).caption="aaa";
没用过VC。
你能不能这样强制类型转换,要看GetDlgItem返回的是否是XXX的对象指针。
 
2 在类向导中给它建立一个成员变量
 
好哦。有没有人能帮我解答二个疑问呢?
 
to weiwei81123:
能不能详细说说?我刚开始用c++.net,实在是菜得不能再菜。
to apw:
如果我这样使用:
class TB
{
private:
TA a;
}
需不需要delete释放?
如何能够申明但不创建呢?
 
>如何能够申明但不创建呢?
哦,我知道了,声明对象指针就可以了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部