构造函数

本文深入探讨了C++中构造函数的概念,包括定义、格式、使用示例以及构造函数在数组中的应用。特别强调了复制构造函数(拷贝构造函数)的作用、触发条件及其在函数调用中的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造函数

一、定义:每个类都分别定义了它的对象被初始化的方式。类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数就叫构造函数。(构造函数的任务就是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。)
【注】:如果类的设计者没有写构造函数,那么编译器会自动生成一个没有参数的构造函数。
二、格式(函数名与类名一样,没有返回值)
例:

Class Complex{
   private:
      double real,iamg;
   public:
      Complex(double r, double i=0){
      real=r;  iamg=i;
   };

三、举例说明
1、

   Class Complex{
   private:
        double real,iamg;
   public:
        void Set(double t,double i);
   };

这个Complex类代表复数,没有写构造函数,因此编译器会为Complex类自动生成一个无参的构造函数。下面语句定义或动态生成Complex对象的语句:
Complex c;//c用无参构造函数进行初始化
Complex * p=new Complex;//对象* p用无参构造函数初始化
2、如果为Complex类编写构造函数

   Class Complex{
   private:
      double real,iamg;
   public:
      Complex(double r, double i=0){
      real=r;  iamg=i;
   };

对下列语句进行编译
(1).Complex c1;//错,Complex类没有无参构造函数(默认构造函数)
(2).Complex& pc=new Complex;//错,.Complex类没有无参构造函数
(3).Complex c2(2);//正确,相当于Complex c2(2,0)
(4).Complex c3(2,4),c4(3,5);//正确
(5).Complex& pc2=new Complex(3,4);//正确
四、构造函数在数组中的使用
具体哪些元素用哪些构造函数进行初始化,取决于定义数组时的写法。
五、复制构造函数(拷贝构造函数)
1、什么叫拷贝构造函数:a、需要一个蓝本。b、是一个构造函数
2、拷贝构造函数是一个特殊的构造函数,名字与类名一致,它的参数是本类型的一个常引用变量。Complex(const Complex & c);
3、什么时候用拷贝构造函数

  • 当用一个对象去初始化同类的另一个对象时,会引发复制构造函数被调用。例:T a(b);
  • 如果F的参数是类A的对象,那么当F被调用时,类A的复制构造函数将被调用。
 class A {
 public:
    A (){};
 A(A& a){
    cout<<"holle"<<endl;
 }
 };
 void Func(A a)
 {
 }
 int main(){
    A a;
    Func(a);
    return 0;
 }

则加上头文件后执行结果为:holle

  • 如果函数额返回值时类A 的对象,则函数返回时,类A 的复制构造函数被调用。
 class A{
    public:
    int v;
    A (int n){v=n;};
    A(const A & a){
        v=a.v;
        cout<<"holle"<<endl;

    }
};
A Func(){
    A a(4);
    return a;
}
int main(){
    cout<<Func().v<<endl;
    reuturn 0;
}

则此程序执行的结果为:
holle
4
关于拷贝的深拷贝与浅拷贝请参考我的另外一篇博客:c++拷贝(shallow/deep拷贝)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值