游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6575|回复: 11

C++语法问题

[复制链接]

14

主题

37

帖子

37

积分

注册会员

Rank: 2

积分
37
发表于 2010-6-8 16:42:00 | 显示全部楼层 |阅读模式
首先写个类A,这个类不提供默认的构造函数,而是提供一个参数为int什么的。
然后在另一个类B中声明一个
A* a;
的变量。
在main中这样写:B* b = new B();
这样写是正确的,如果我们将A* a改为:
A a;
那么就会报错:A没有合适的默认构造参数
刚才我又试了一下,发现:
A a;
这样的写法就是用A的默认构造参数声明并初始化了一个变量。
所以我得出这样的结论:
在类中,如果我们需要一个类的变量,就把它声明称指针
我又试了下引用,结果VS说:必须在成员初始化列表中初始化(大概就这个意思了)

请各位大大有空对我的这个做点指正,小弟不胜感激 [em2]

14

主题

37

帖子

37

积分

注册会员

Rank: 2

积分
37
 楼主| 发表于 2010-6-8 16:48:00 | 显示全部楼层

Re: C++语法问题

在加一句,我的意思是在类中如果这样写A a;
则我们必须要有A的默认构造函数。
?澹?诶嘀猩?饕桓隼嗟谋淞慷嫉萌シ???氖植幔?纯此?峁┠?瞎乖旌??唬

===================
纠结了,C++还有好多好多好多不知道的,努力  [em17]

14

主题

37

帖子

37

积分

注册会员

Rank: 2

积分
37
 楼主| 发表于 2010-6-8 17:06:00 | 显示全部楼层

Re: C++语法问题

又出现新问题了,如果我这样写:
A a;
那么,我在使用这个类的类中的析构函数中如何释放资源,只晓得指针怎么释放的,这样写该怎么释放啊,哎,做得越多,问题越多了 [em17]

1

主题

14

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2010-6-8 18:55:00 | 显示全部楼层

Re:C++语法问题

A *a = new A();
是指针分配对象空间。
如果用A a;的话,这是个动态对象。
a必须有默认的无参数构造函数,才能这么写。
否则必须初始化:A a = A(...);
A a;是动态对象,其scope在构造的{}之间。如果,
{
    A a;
}
在遇到}时,就会自动析构。而指针,
{
    A *a;
}
遇到}时,释放的只是指针本身,并没有释放指针指向的区域,所以用指针构造时,要手动delete

14

主题

37

帖子

37

积分

注册会员

Rank: 2

积分
37
 楼主| 发表于 2010-6-9 13:02:00 | 显示全部楼层

Re: C++语法问题

我的主要意思是问:
我们的类中使用别人的类,那么我们用A* a;
这样好些,一方面是效率问题(对吧?)!
另一个问题就是如果我们这样写:
A a;
这样的语法是使用A的默认构函数初始化a,如果A没有提供默认构造函数,那么就会报错,就
出现了我最前面提到的问题。
这里再加一个我想到的问题,一般来说,引用是使用在传递参数上吧,类中的变量基本不会出现引用的情况吧,或者说
类中出现引用是个不好的设计。
========================================
我是刚毕业的,找到C++工作不容易啊,大侠们请不吝赐教,指点下小弟吧

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2010-6-9 21:19:00 | 显示全部楼层

Re:C++语法问题

  1. class A {
  2. public:
  3.     A(int i) { i_ = i; }
  4.     int i_;
  5. };

  6. class B {
  7. public:
  8.     B() : a_(888) {}
  9.     A a_;
  10. };
复制代码

1

主题

266

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
发表于 2010-6-10 11:29:00 | 显示全部楼层

Re: Re: C++语法问题

mqlx0629: Re: C++语法问题

我的主要意思是问:
我们的类中使用别人的类,那么我们用A* a;
这样好些,一方面是效率问题(对吧?)!
...

你想在自己的B类里以指针的形式“包含”A类,没有错。
但你写进B类里的只是个指针,并没有实际指向谁。你必然会用pa = new A;来将指针指向实际对象。那么这样你当然要自己用delete来销毁它啦。

对于C++的学习,楼主可以看看《C++ Primer》

14

主题

37

帖子

37

积分

注册会员

Rank: 2

积分
37
 楼主| 发表于 2010-6-10 13:00:00 | 显示全部楼层

Re:C++语法问题

嗯,语法常用的我都基本会,就是实际中编码不能太活用。
funcman又解决了我的问题,提醒了我。你不说我还差点忘记这个写法了。
那我结合下今天碰到的问题,结论就是我们必须指针声明就初始化(这又
让我想到了一本书上说:指针初始化用0而不用NULL的问题)。
今天我碰到的问题就是我调试程序时,没有把初始化全局指针的函数保证
在其他函数只用这个指针之前被调用,所以程序就正确编译,运行纠结。
不知道为什么一个指向类的指针,如果不是用它的构造函数初始化,那用
0和NULL有什么用?反正没有用new分配它的内存,我调用它的方法就会让
程序死掉!
指针在不用的时候还是不用哦,我水平低现在,用了容易纠结,去复习下
引用了

3

主题

114

帖子

250

积分

中级会员

Rank: 3Rank: 3

积分
250
发表于 2010-6-10 18:15:00 | 显示全部楼层

Re:C++语法问题

还是多看看书,写写代码,看看别人的写得好的代码。

0

主题

113

帖子

122

积分

注册会员

Rank: 2

积分
122
发表于 2010-6-13 08:07:00 | 显示全部楼层

Re:C++语法问题

funcman 已经解决你的问题了。

B() : a_(888) {}
这句就是所谓的初始化列表。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-10 10:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表