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

一、对象的使用

  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; 
}

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

总结:

  • c++允许构造函数重载,以适应不同的场合,这些构造函数之间以它们之间所带参数个数和类型的不同而区分。

  • 尽管一个类中可以包含对个构造函数,但对每一个具体的对象而言,建立对象时只执行其中的一个构造函数。

  • 如果构造函数在类的声明外定义,那么默认参数上应该在类内声明构造函数原型时指定,而不能在类外构造函数定义时指定,因为类的声明是放在头文件中的,用户可以看到,而构造函数的定义是类的实现细节,用户往往是看不到的。因此,在声明时指定默认参数,可以保证用户在建立对象时知道怎样使用默认参数。

  • 如果构造函数的全部参数都指定了默认值,则在定义对象时可以指定一个或几个实参,也可以不给出实参,这时的构造函数也属于默认构造函数。

    Person(double x=0.0,double y=0.0);

    因为一类中只能声明一个默认构造函数,因此不能再声明无参数的构造函数 Person();

  • 在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数

    Person(double x=0.0,double y=0.0)
    person(double p);

因此,一般不要同时使用构造函数的重载和有默认参数的构造函数。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿龙先生啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值