C++:对象的初始化和构造函数

对象的初始化和构造函数

构造函数:是一种特殊的成员函数,它主要用于为对象分配空间,进行初始化。构造函数
的名字必须与类名相同,它不要用户来调用,而是在建立对象时自动执行的

形式一:
类名 对象名(实参表);

例如:
class Complex{
 private:
        double real;
        double imag;
 public:
        Complex(double r,double i)
        {
           real = r;
           imag = i;
        }
        double abscomplex()
        {
           double t;
           t = real*real+imag*imag;
           return sqrt(t);
        }
};

// 形式一举例:

 #include<iostream>
 #include<cmath>
 using namespace std;
 class Complex{
 public:
       Complex(double r,double i)             //构造函数
       {
             real = r;
             imag = i;
       }
       double abscomplex()                    //普通函数
       {
             double t;
             t = real*real+imag+imag;
             return sqrt(t);
       }
 private:
       double real;
       double imag;
}A(1.1,2.2);
int main()
{
       //Complex A(1.1,2.2);                   //定义类Complex的对象A时调用构造函数Complex
       cout<<"复数的绝对值是:"<<A.abscomplex()<<endl;
return 0;
}

构造函数
形式二举例:
类名 *指针变量名 = new 类名(实参表);

/*
 例如:
        int main()
        {
         Complex *pa = new Complex(1.1,2.2);
         cout<<"复数的绝对值是:"<<pa->abscomplex()<<endl;
         cout<<"复数的绝对值是:"<<(*pa).abscomplex()<<endl;
         delete pa;
         return 0;
        }
  构造函数特点:
        1.构造函数的名字必须和类名相同,否则编译程序将把它当作一般函数来处理。
        2.构造函数没有返回值,就是void也不行。
        3.与普通函数一样,构造函数的函数体可写在类体内,也可以写在类体外。
        例如(以下例子省略了inline,为隐式内联函数):
calss Complex{
 private:
        double real;
        double imag;
 public:
        Complex(double r,duble i);               //声明构造函数原型
        double abscomplex();                     //声明成员函数原型
};
Complex::Complex(double r,double i)              //在类外定义构造函数
{
        real = r;
        imag = i;
}
double Complex::abscomplex()                    //在类外定义成员函数
{
        double t;
        t = real*real+imag*imag;
        return sqrt(t);
}
        4.构造函数的作用主要是用来对对象进行初始化,一般不提倡在构造函数中
          加入与初始化无关的内容。
        5.构造函数一般声明公有成员,但它不需要也不能像其他成员函数那样被显示调用,
          它是在定义对象的同时被自动调用的,而且只执行一次。
        6.在实际应用中,通常需要给每个类定义构造函数。如果没有给类定义构造函数,
          则编译系统自动地生成一个默认的构造函数。
          例如:
                Complex::Complex()
                {}
          注意:这个默认的构造函数不带任何参数,函数体是空的,它只能为对象开辟数据
                成员存储空间,而不能为对象中的数据成员赋初值。
*/

//例3.6  构造函数可以不带参数
#include<iostream>
#include<cmath>
using namespace std;
class Complex{
 private:
        double real;
        double imag;
 public:
        Complex()                    //不带参数的构造函数
        {
            real = 0;
            imag = 0;
        }
        void init(double r,double i) //公有成员函数,作为类的外部接口
        {
            real = r;
            imag = i;
        }
        double abscomplex()
        {
            double t;
            t = real*real+imag*imag;
            return sqrt(t);
        }
};
int main()
{
 Complex A; //定义类Complex的对象A时调用不带参数的构造函数,分别给数据成员real和imag赋初值0
 A.init(1.1,2.2);  //调用公有成员函数init,分别给数据成员real和imag赋值1.1和2.2
 cout<<"复数的绝对值是:"<<A.abscomplex()<<endl;
 return 0;
}                
时间: 2024-10-08 04:52:41

C++:对象的初始化和构造函数的相关文章

对象的初始化与清理

随着计算机革命的发展,"不安全"的编程方式已经逐渐成为了编程代价高昂的主因之一. 正确的初始化和清理过程对于程序的安全性和性能至关重要,不同的编程语言对此具有不同的处理机制.C++中利用构造器完成初始化,当对象不再被使用时调用析构函数完成销毁,程序员需要手动完成内存释放管理过程:Java也采用了构造器完成初始化,同时提供了垃圾会收器对不再使用的内存资源进行自动管理,减轻了程序员管理手动管理内存的编程负担. 1 重载 Java(和C++)中,构造器是强制重载方法名的原因之一.因为构造器常

Java学习之对象的初始化过程

示例代码: 1 class Person 2 { 3 private Person(){} 4 private String name = "hah"; 5 private int age; 6 private static String country = "cn"; //构造函数 7 Person(String name,int age) 8 { 9 this.name = name; 10 this.age = age; 11 } //静态代码块 12 sta

不存在继承关系各类中、不存在对象引用的对象创建初始化顺序

实例3 class One   {        One(String str)      {        System.out.println(str);       }    } class Two   {       One one_1 = new One("one-1");       One one_2 = new One("one-2");       One one_3 = new One("one-3");      Two(S

隐式类型、对象集合初始化、匿名类型

隐式类型和对象集合初始化器是在C# 3.0中引入的. 1 隐式类型 var关键字,主要还是编译器根据变量的值来推断其类型. 1.1隐式类型的局部变量 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 var stringvariable="learning hard"; 6 stringvariable=2; 7 } 8 } 其实当你把鼠标放在var上面的时候,还是可以看到其类型的. 使用隐式类型时有一些限制,包括一

java中类的初始化和对象的初始化

静态的属于全局静态区,这个部分独立存在,不管是成员还是块,都是静态的,大家地位相等,先到先得. 然后是成员初始化,这个部分在类的构造函数前初始化,因为编译器(或者设计者)可能认为构造函数调用了这个成员变量,所以在其前初始化了.或者说是成员自己有自己的能力来初始化自己,不用构造函数来管,这部分属于能力比较强的,虽然没有静态的地位高,但是,还是能自给自足的一部分团体. 最后才构造函数,这个时候就开始动工来建立这个类的实例了.这个步骤相当于建大楼,终于开始建立了,前面的准备工作已经准备完了,下面就开始

对象的初始化,拷贝和析构

每个类只有一个析构函数,但可以由多个构造函数. 对于一个类,如果程序员不显式的声明定义上述函数,编译器自动的产生4个inline函数, A():A(const A& ):~A(); A& operator=(const A& ) 1.不要在构造函数内做与初始化无关的工作,不要在析构函数内做与销毁对象无关的工作. 注意初始化和赋值的区别 初始化:在对象创建的同时使用初值直接填充对象的内存单元.因此不会产生类型转换等中间过程,也就不存在临时对象的产生 赋值:在对象创建好后任何时候都可调

Java基础——类和对象的初始化过程

本节把类和对象的初始化所涉及到的所有代码块阐述一边. 示例代码: 1 public class Demo { 2 private static String name; 3 private String age; 4 5 // 主函数 6 public static void main(String[] args) { 7 Demo demo = new Demo(); 8 9 } 10 11 // 构造函数 12 public Demo() { 13 System.out.println("我

C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询

1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法和属性等.Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为.例如,在一个方法前标注[Obsolete]特性,则调用该方法时VS则会提示该方法已过期的警告,如下图: 又如,在.Net Re

黑马程序员-Java基础-面向对象-类和对象、封装、构造函数、this、static、饿汉式&amp;懒汉式

第一讲  面向对象概念 1.  定义 相对于与面向过程而言的,将功能封装进对象,我们只关心具备了该功能的对象,而不用关注对象的具体细节. 面向对象的特点:使复杂问题简单化.我们只关心什么对象能处理什么事情,而不用关心具体的实现细节. 2.  面向对象特征 封装.继承.多态. 第二讲  类和对象的关系 1.  概述 类就是:对现实生活中事物的描述,可以是实体的事物也可以是一件事等: 对象是:是某类事物的实例,实实在在存在的个体: 映射到java中,描述就是class定义的类. 具体对象就是对应ja