最赞回答 / 未来蓝图
区别:1、构造函数的函数名称与类名同名,其他方法(函数)名称可以自定义。2、构造函数仅在对象被创建时系统会根据给定的参数以及类中的构造函数定义进行选择调用,如果类中没有定义构造函数,系统默认会提供一个无参构造空函数,什么都不会做,只是满足接口要求,构造函数不能被显式调用。其他函数根据程序员需要而调用,且必须显式调用。3、由于对象创建后,系统必须返回新建对象的地址,赋值给指针变量(C++,C#中是将引用赋值给对象变量,其实一样,内部也是对象地址),那么换句话说,返回接口被系统占用了,因此构造函数就不能返回任...
2018-03-26
最赞回答 / 不断进取
栈:是由编译器在需要时自动分配,不需要时自动清除的变量存储区。通常存放局部变量、函数参数等。堆:是由new分配的内存块,由程序员释放(编译器不管),一般一个new与一个delete对应,一个new[]与一个delete[]对应。如果程序员没有释放掉, 资源将由操作系统在程序结束后自动回收。
2018-03-25
class Student
{
public:
void setName(string n)
{
m_strName=n;
}
string getName()
{
return m_strName;
}
private:
string m_strName;
};
int main()
{
Student *p = new Student();
p->setName("慕课网");
cout<<p->getName()<<endl;
delete p;
p=NULL;
return 0;
}
{
public:
void setName(string n)
{
m_strName=n;
}
string getName()
{
return m_strName;
}
private:
string m_strName;
};
int main()
{
Student *p = new Student();
p->setName("慕课网");
cout<<p->getName()<<endl;
delete p;
p=NULL;
return 0;
}
老师ppt的一部分代码没有经过测试,出现了错误。
int main(void){
TV *p = new TV[5];
p[0].type = 0;
p[0].changeVol();
.......
其中p[0]是指针模拟数组的解除引用,等价于*(p+0),注意到*号解除引用,所以此时p[0]不是指针了,是类实例(在C++内部实现中,类与结构体是几乎一致的),所以应该用.来调用成员。p[0].type = 0。留言第一的同学说得没错,不信的自己调试代码。
int main(void){
TV *p = new TV[5];
p[0].type = 0;
p[0].changeVol();
.......
其中p[0]是指针模拟数组的解除引用,等价于*(p+0),注意到*号解除引用,所以此时p[0]不是指针了,是类实例(在C++内部实现中,类与结构体是几乎一致的),所以应该用.来调用成员。p[0].type = 0。留言第一的同学说得没错,不信的自己调试代码。
2018-03-18
最赞回答 / SKY寒恒
因为类中定义的m_iScore仅仅只是声明,并没实例化,没有实例化就没有存储空间,那么m_iScore就不能初始化;只有类实例化成对象,编译器才会给类中的数据成员分配存储空间。我也是刚学,回答得不正确的话,请多多包涵!
2018-03-18
又来赞一下这位老师了,把初始化列表讲得很细,而我们老师(或许是她默认我们全自学了(自学还要她干什么))就没讲:,等许多细节
2018-03-17
构造函数前面的引子太棒了,形象生动,很快就能接受了新概念(在这里我又想吐槽一下我的c++老师了,或许是我个人原因,不适合她的教学方法,但她将东西没有条理(起码我听起来是这样,或许我太笨,所以来这里补课,James真的很棒)就连PPT都是散乱的。。。唉,吐槽之后好多了。再次感谢一下James老师!!!
2018-03-17