构造函数的参数

上一小节的例子中,类A同时提供了不带参数和带参数的构造函数。

构造函数可以是不带参数的,这样对类的实例的初始化是固定的。有时,我们在对类进行实例化时,需要传递一定的数据,来对其中的各种数据初始化,使得初始化不再是一成不变的,这时,我们可以使用带参数的构造函数,来实现对类的不同实例的不同初始化。

在带有参数的构造函数中,类在实例化时必须传递参数,否则该构造函数不被执行。

让我们回顾一下10.2节中关于车辆的类的代码示例。我们在这里添加上构造函数,验证一下构造函数中参数的传递。

程序清单10-6:

using System;
class Vehicle //定义汽车类
{
  public int wheels; //仅有成员:轮子个数
  protected float weight; //保护成员:重量
  public Vehicle(){;}
  public Vehicle(int w,float g){
         wheels=w;
         weight=g;
    }
  public void Show(){
       Console.WriteLine("the wheel of vehicle is:{0}",wheels);
       Console.WriteLine("the weight of vehicle is:{0}",weight);
     }
  class train //定义火车类
  {
    public int num; //公有成员:车厢数目
    private int passengers; //私有成员:乘客数
    private float weight; //私有成员:重量
    public Train(){;}
    public Train(int n,int p,float w){
      num=n;
      passengers=p;
      weight=w;
    }
    public void Show(){
        Console.WriteLine("the num of train is:{0}",num);
        Console.WriteLine("the weight of train is:{0}",weight);
        Console.WriteLine("the Passengers train car is:{0}",Passengers);
      }
   }
   class Car:Vehicle //定义轿车类
   {
      int passengers; //私有成员:乘客数
      public Car(int w,float g,int p):base(w,g)
    {
          wheels=w;
          weight=g;
          passengers=p;
        }
      new public void Show(){
        Console.WriteLine("the wheels of car is:{0}",wheels);
        Console.WriteLine("the weight of car is:{0}",weight);
        Console.WriteLine("the passengers of car is:{0}",Passengers);
      }
   }
   class Test
   {
    public static void Main(){
       Vehicle v1=new Vehicle(4,5);
       Train t1=new Train();
           Train t2=new Train(10,100,100);
           Car c1=new Car(4,2,4);
           v1.show();
           t1.show();
           t2.show();
           c1.show();
       }
}

程序的运行结果为:

the wheel of vehicle is :0
the weight of vehicle is:0
the num of train is:0
the weight of train is:0
the Passengers of train is:0
the num of train is:0
the weight of train is:0
the Passengers of train is:0
the wheel of car is:4
the weight of car is:2
the passengers of car is:4

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索函数
, train
, public
, weight
, of函数
, The
, WriteLine
, wheel
is()函数
,以便于您获取更多的相关知识。

时间: 2024-09-29 22:01:25

构造函数的参数的相关文章

c++中拷贝构造函数的参数类型必须是引用

如果拷贝构造函数中的参数不是一个引用,即形如CClass(const CClass c_class),那么就相当于采用了传值的方式(pass-by-value),而传值的方式会调用该类的拷贝构造函数,从而造成无穷递归地调用拷贝构 造函数.因此拷贝构造函数的参数必须是一个引用   在C++中, 构造函数,拷贝构造函数,析构函数和赋值函数(赋值运算符重载)是最基本不过的需要掌握的知识. 但是如果我问你"拷贝构造函数的参数为什么必须使用引用类型?"这个问题, 你会怎么回答? 或许你会回答为了

jQuery构造函数init参数分析续_jquery

如果selector是其他字符串情况就比较多了比较复杂了 // Handle HTML strings if ( typeof selector === "string" ) {...} 开始分不同的情况处理 // Are we dealing with HTML string or an ID? if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 )

c++构造函数传参数失败

问题描述 c++构造函数传参数失败 #include #include #include using namespace std; class Person{ public: Person(string id="gdhs",string ="dsfsda" ,string ="" ,string ="",string ="" ) { void setIdPerson(string id); void set

位置-Android 19 百度InfoWindow 的构造函数的参数是什么?

问题描述 Android 19 百度InfoWindow 的构造函数的参数是什么? API上的三个参数是这样的: public InfoWindow(View view, LatLng position, InfoWindow.OnInfoWindowClickListener listener) 通过传入的 view 构造一个 InfoWindow, 此时只是利用该view生成一个Bitmap绘制在地图中. 参数: view - InfoWindow 展示的 view position - I

对象-为什么拷贝构造函数的参数类型不是引用 就会变成死循环的递归

问题描述 为什么拷贝构造函数的参数类型不是引用 就会变成死循环的递归 实在不理解这个递归的过程 01.#include 02.using namespace std; 03. 04.class CExample 05.{ 06.private: 07. int m_nTest; 08. 09.public: 10. CExample(int x) : m_nTest(x) //带参数构造函数 11. { 12. cout << "constructor with argument&q

c++中拷贝构造函数的参数类型必须是引用_C 语言

在C++中, 构造函数,拷贝构造函数,析构函数和赋值函数(赋值运算符重载)是最基本不过的需要掌握的知识. 但是如果我问你"拷贝构造函数的参数为什么必须使用引用类型?"这个问题, 你会怎么回答? 或许你会回答为了减少一次内存拷贝? 很惭愧的是,我的第一感觉也是这么回答.不过还好,我思索一下以后,发现这个答案是不对的. 原因:如果拷贝构造函数中的参数不是一个引用,即形如CClass(const CClass c_class),那么就相当于采用了传值的方式(pass-by-value),而传

jQuery构造函数init参数分析续

  其实楼主的F和jQuery.fn.init是相等的; 实现功能是和jq一样的, 只是jq的把构造函数放进原型;如果非要说原因,个人理解jq这样写整体结构清晰,先是入口构造函数,紧跟着是原型部分(原型里面init是初始化),但是不好理解;乍一看确实挺绕, 我也是看了好久才明白怎么回事 如果selector是其他字符串情况就比较多了比较复杂了 ? 1 2 // Handle HTML strings if ( typeof selector === "string" ) {...} 开

jQuery构造函数init参数分析_jquery

在我的上一篇随笔里面分析了jQuery的构造函数,jQuery对象中有一个原型方法init才是是真正的构造函数,通过init的原型对象跟jQuery的原型对象保持引用关系使得init的实例可以正常调用jQuery的原型方法,就好像是jQuery的实例一样.下面就来看看init这个幕后的构造函数是怎么写的: init: function( selector, context, rootjQuery ) { ... } 可以看到这个方法接受3个参数,其前两个参数是jQuery方法传递过来的 var

php 构造函数支持不同个数参数的方法

php 构造函数支持不同个数参数方法 原理:在__construct中使用 func_num_args 获取参数个数,再根据参数个数执行不同的调用.参数值使用func_get_arg() 方法获得. demo: <?php class demo{ private $_args; public function __construct(){ $args_num = func_num_args(); // 获取参数个数 // 判断参数个数与类型 if($args_num==2){ $this->_