带参数的构造函数的作用问题

谭老师的那本CC+,错了,是C++,上到带参数的构造函数时,又一道例题是这样的:
#include <iostream>
using namespace std;
class Box
{
float length,height,width;
public:
float volume();
Box(float,float,float);
};
float Box:: volume()
{
return length*height*width;
}
Box:: Box(float l,float h,float w)
{
length=l;
height=h;
width=w;
}
int main(int argc, char *argv[])
{
Box count1(1.1,1.2,1.3);
Box count2(2.1,2.2,2.3);
cout <<count1.volume()<<endl;
cout <<count2.volume()<<endl;
}
我觉得多此一举,如果对对象中的数据成员进行赋值的话也可以不用这种方法,可以把源代码改成这样不就得了?:
#include <iostream>
using namespace std;
class Box
{
float length,height,width;
public:
float volume(float,float,float);
}one,two;
float Box:: volume(float l,float h,float w)
{
return l*h*w;
}
int main(int argc, char *argv[])
{
cout <<one.volume(1.1,1.2,1.3)<<endl;
cout <<two.volume(2.1,2.2,2.3)<<endl;
}
这样的话,就不用多写一个构造函数了?

  构造函数是用来初始化用的,当然可以带参数了。初始化作用,可以带参数,参数类型和个数不同的的话可以进行构造函数重载。
  系统自带的构造函数是不带参数的,自己写的话就写成带参构造了。
  主要起初始化对象的作用,构造函数可以带参数,起使用方法和普通方法相同,但不能有返回值和返回类型。
  .net对象的创建需要三步,但是我只记得两步,一是申请内存,得到对象的地址,付给this指针,二就是初始化这块内存,构造函数就是用来完成第二步的。可以带参数。用“this指针”这个说法只是为了方便说明,实际上.net对象在其生命周期内,this的值,或者说对象的真实地址是可以变化的。不过这些是GC的事情,不用程序员操心。
  如果不显式提供构造函数,那么编译器会帮你写一个,这个构造函数是public且无参的,如果你提供了构造函数,不管他是不是public,编译器都不再会帮你编写构造函数。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-21
输出的结果是一样的,但不代表是一样的啊
第一个程序,Box count1(1.1,1.2,1.3);是构造了一个对象,并给对象的成员赋值,也就是length = 1.1, height = 1.2, width = 1.3
第二个程序,调用了类的默认构造函数,什么都不做,也就是说对象的成员length,height,width;都没有被赋值,调用volume函数只是返回3个参数的积,也就是说,根本不用这个类都可以实现的,因为根本没有用到类里面的任何成员,只是将这个函数定义为类的成员函数而已

比如,要对类的对象运算就要用到有参数的构造函数的,给类里面的成员变量赋值。
两个程序根本就是两码事
第2个回答  推荐于2017-09-16
构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值 ,总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。

构造函数与其他方法的区别 :
1.构造函数的命名必须和类名完全相同;而一般方法则不能和类名相同。
2.构造函数的功能主要用于在类的对象创建时定义初始化的状态.它没有返回值,也不能用void来修饰.这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择.而其他方法都有返回值.即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的。
3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用。
4.当定义一个类定义的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略不去c#编译器会提供一个默认的构造函数.此默认构造函数是不带参数的.而一般方法不存在这一特点。
第3个回答  2011-10-21
你定义Box类有个毛球用?
例子是为了说明构造函数的作用的。
直接输出结果不是更好!
#include <iostream>
using namespace std;
int main(int argc, char * argv[])
{
cout<<1.1*1.2*1.3<<endl;
cout<<2.1*2.2*2.3<<endl;
}
第4个回答  2011-10-21
C++与C的区别就在于类的使用。
要理解构造函数就需要理解对象,这个例子只是简单让你明白一个类需要些什么:属性与功能。
而构造函数的作用就是在于对象创建的时候就调用。你的那种做法是C的想法吧,和结构体的做法较像。
但是从类的角度来说,你的对象还没有创建成功,又怎么可以调用volume这个方法呢?本回答被提问者采纳
相似回答