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;    
}                
复制代码

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4911931.html ,如需转载请自行联系原作者
相关文章
|
2天前
|
存储 程序员 编译器
C++11:声明 & 初始化
C++11:声明 & 初始化
6 0
|
3天前
|
Java C++ Python
【C++从练气到飞升】06---重识类和对象(二)
【C++从练气到飞升】06---重识类和对象(二)
|
3天前
|
编译器 C++
【C++从练气到飞升】06---重识类和对象(一)
【C++从练气到飞升】06---重识类和对象(一)
|
3天前
|
编译器 C++
【C++从练气到飞升】03---构造函数和析构函数
【C++从练气到飞升】03---构造函数和析构函数
|
3天前
|
存储 编译器 C语言
【C++从练气到飞升】02---初识类与对象
【C++从练气到飞升】02---初识类与对象
|
5天前
|
C++
【C++】类与对象(日期计算器)
【C++】类与对象(日期计算器)
16 0
|
5天前
|
编译器 C++
【C++】类与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)
【C++】类与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)
8 2
|
5天前
|
编译器 C++
【C++】类与对象(运算符重载、const成员、取地址重载)
【C++】类与对象(运算符重载、const成员、取地址重载)
11 2
|
4天前
|
设计模式 安全 算法
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
14 0
|
5天前
|
C语言 C++
【C++】string类(常用接口)
【C++】string类(常用接口)
13 1