c++对象、构造函数和初始化列表
来源:互联网 发布:mac air能装win7系统 编辑:程序博客网 时间:2024/05/20 04:32
一、对象的使用
- 对象是一个实体,在使用对象时,它的每一个数据成员都应有确定的值。
一般形式 :
类名 对象1,对象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中,访问通过指针访问。
二、构造函数的使用
- 构造函数
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 ℞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); 因此,一般不要同时使用构造函数的重载和有默认参数的构造函数。
- c++对象、构造函数和初始化列表
- 初始化列表和构造函数
- 【C/C++】构造函数的初始化列表
- 构造函数的对象初始化列表
- 构造函数初始化列表(C++)
- 《深度探索C++对象模型》笔记(三)构造函数、拷贝构造和初始化列表
- c++构造函数和初始化列表
- 构造函数和初始化列表的区别
- 构造函数中的初始化列表和赋值
- C++类构造函数和初始化列表
- C++ 初始化列表和构造函数
- 九、构造函数和析构函数(三) 初始化列表、对象成员初始化、const,引用成员初始化
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- 【深入理解C++】从初始化列表和构造函数谈C++的初始化机制
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- 树莓派
- Aras Innovator: 如何导入项目模板
- 第十二周Java作业
- HTML div动画
- Unity远程加载到本地,本地加载到游戏中
- c++对象、构造函数和初始化列表
- exe4j 将java程序打包成exe文件
- 【清华集训2017模拟11.26】字符串
- 如何解决容器边框不为整数的情况?
- vue开发请求本地模拟数据的配置方法
- 厌倦写代码的人是如何做软件开发的
- 使用 jQuery 实现 radio 的选中与反选
- ideaIU-2017.2.6 安装过程
- Tensorflow-浅层神经网络(MNIST数据集)