c++对象、构造函数和初始化列表

来源:互联网 发布:mac air能装win7系统 编辑:程序博客网 时间:2024/05/20 04:32

一、对象的使用

  1. 对象是一个实体,在使用对象时,它的每一个数据成员都应有确定的值。
    一般形式 :
    类名 对象1,对象2,.
  2. 对象中成员的访问通过对象名和对象选择符访问对象中的成员
    一般形式是:
    对象名.数据成员 或 对象名.成员函数名[(实参表)]
    其中”.”叫做对象选择符,简称点运算符
   class Point{    public:        void setpoint(int a,int b)        {            x=a;            y=b;        }        int getX(){            return x;        }        int getY(){            return y;        }        private:            int x,y;};int main(){    Point op1,op2;//对象的定义     int i,j;    op1.setpoint(2,3);//函数的调用     op2.setpoint(4,5);    i=op1.getX();    j=op1.getY();    cout<<"op1 i="<<i<<" op1 j="<<j<<endl;    i=op2.getX();    j=op2.getY();    cout<<"op2 i="<<i<<" op2 j="<<j<<endl;}//使用new运算法动态建立对象的方式**Complex* pa=new Complex(1.1,2.2);    cout<<"复数的绝对值是:"<<pa->abscomplex()<<endl;** 

使用new运算符动态建立对象的方式,开辟了一段内存空间,存放了一个Complex类对象,同时调用了该类的构造函数给数据成员赋初值。这个对象没有名字,称为无名函数(感觉好像跟java的匿名对象差不多),当该对象有地址,这个地址存放在指针变量pa中,访问通过指针访问。

二、构造函数的使用

  1. 构造函数
class Person{    public:       Person();                     //声明1个无参数的构造函数       Person(string x,int y,int z); //声明1个带有三个参数的构造函数        void showPerson();    private:        string name;        int num;        int height;};Person::Person(){                    //定义1个无参数的构造函数     name="康师傅没有眼泪";    num=82080888;    height=75;}Person::Person(string x,int y,int z){//定义1个带有三个参数的构造函数     name=x;    num=y;    height=z;}inline void Person::showPerson(){    cout<<name<<","<<num<<","<<height<<endl;}int main(){    Person per1;                     //定义类Person的对象per1,调用无参的构造函数      cout<<"Person1 output:"<<endl;    per1.showPerson();    Person per2("卧龙先生",82080888,1000); // 定义类Person的对象per3并初始化     cout<<"Person2 output:"<<endl;    per2.showPerson();> 说明:   > 在使用构造函数时,如果用户没有定义构造函数,系统就会自动提供一个函数体为空的默认构造函数,但是,只要类中定义了一个构造函数(不一定是无参构造函数),系统将不再给它提供默认的构造函数。2.带有初始化列表的构造函数 class A{public:A(int x1):x(x1),rx(x),pi(3.14) { }////带有初始化列表的构造函数void print(){cout<<"x="<<x<<" "<<"rx="<<rx<<" "<<"pi="<<pi<<endl; }private:int x;int &rx;const double pi;};int main(){    A a(20);a.print();return 0; }


成员初始化列表写法方便,尤其当需要初始化的数据成员较多时更能显示其优越性,带有成员初始化列表的构造函数的一般形式如下:
类名:构造函数名([参数表])[:(成员初始化列表)]
{ //构造体 }

总结: (1)c++允许构造函数重载,以适应不同的场合,这些构造函数之间以它们之间所带参数个数和类型的不同而区分。
(2)尽管一个类中可以包含对个构造函数,但对每一个具体的对象而言,建立对象时只执行其中的一个构造函数。
(3)如果构造函数在类的声明外定义,那么默认参数上应该在类内声明构造函数原型时指定,而不能在类外构造函数定义时指定,因为类的声明
是放在头文件中的,用户可以看到,而构造函数的定义是类的实现细节,用户往往是看不到的。因此,在声明时指定默认参数,可以保证用户在建立对象时知道怎样使用默认参数。
(4)如果构造函数的全部参数都指定了默认值,则在定义对象时可以指定一个或几个实参,也可以不给出实参,这时的构造函数也属于默认构造函数。
Person(double x=0.0,double y=0.0);
因为一类中只能声明一个默认构造函数,因此不能再声明无参数的构造函数 Person();
(5)在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数
Person(double x=0.0,double y=0.0)
person(double p); 因此,一般不要同时使用构造函数的重载和有默认参数的构造函数。

阅读全文
0 0
原创粉丝点击