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 ;
}
构造函数
形式二举例:
类名 *指针变量名 = 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 = ;
imag = ;
}
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 ;
}
C++:对象的初始化和构造函数的更多相关文章
- C++对象数组初始化
类对象 数组 初始化可以使用构造函数初始化,同时类有不同的构造函数,可以对类对象数组元素使用不同的构造函数;
- Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)
反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强 ...
- java中类的初始化和对象的初始化
静态的属于全局静态区,这个部分独立存在,不管是成员还是块,都是静态的,大家地位相等,先到先得. 然后是成员初始化,这个部分在类的构造函数前初始化,因为编译器(或者设计者)可能认为构造函数调用了这个成员 ...
- [C#解惑] #2 对象的初始化顺序
谜题 在上一篇C#解惑中,我们提到了对象的初始化顺序.当我们创建一个子类的实例时,总是会先执行基类的构造函数,然后再执行子类的构造函数.那么实例字段是什么时候初始化的呢?静态构造函数和静态字段呢?今天 ...
- [百度空间] [转] 在 Visual C++ 中控制全局对象的初始化顺序
from: http://blog.csdn.net/classfactory/archive/2004/08/07/68202.aspx 在 C++ 中,同一个翻译单位(.cpp文件)里的全局对象的 ...
- 重新开始学习javase_对象的初始化
一.类加载机制 类加载的时机类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载.验证.准备.解析.初始化.使用.卸载7的阶段: 加载.验证.准备.初始化和卸载这5个阶段的顺序是 ...
- C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询
1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...
- C++中的初始化列表中可以对那些变量或对象进行初始化
构造函数与其函数体之间可以添加初始化列表,能对某些对象进行初始化.格式为 类名() : 变量1(参数1),变量2(参数2) { } 1. 父类的对象的构造必须在初始化列表中,如: 子类名(): ...
- java 对象的初始化过程
PersonDemo p=new PersonDemo("lisi",20);这句话都做了什么事情? 因为new用到了PersonDemo.class,所以会先找到PersonDe ...
随机推荐
- C# 顺序表操作
虽然.NET已经是现实了Reverse(),但是学习算法有必要知道其是怎么实现的: private static void ReverseArray(int[] array) { int temp; ...
- EventHandler委托的使用
今天复习了一下事件和委托,本来看事件来着,看到EventHandler,写了一个小例子,想贴在这里解释一下.为了弄清楚EventHandler, 还是回归到最基本的委托,曾经在园子里看到一位前辈用深入 ...
- Jquery LigerUI框架学习(一)
ligerUI框架是一个很丰富的后台框架模板,具有简洁大方的后台样式框架,还有很多灵活的控件,方便开发人员使用: 把昨天学习的成功拿出来供大家学习学习: 首先我们要去ligerUI官网下载Jquery ...
- php中const与define的使用区别 详解
1.const用于类成员变量定义,一旦定义且不能改变其值.define定义全局常量,在任何地方都可以访问. 2.define不能在类中定义而const可以. 3.const不能在条件语句中定义常量 i ...
- window对象的属性方法名造成的命名冲突
事件起因: 一次开发中需要获取一个数组的长度,写下如此代码 function func(arr){ length = arr.length; ......//相关操作 } 程序在chrome下正常运行 ...
- bnuoj 16493 Just Pour the Water(矩阵快速幂)
http://www.bnuoj.com/bnuoj/problem_show.php?pid=16493 [题解]:矩阵快速幂 [code]: #include <cstdlib> #i ...
- 想成为真正的代码gg,目标
转眼已而大二了,可是在这上了一个星期的课,感觉生活非常的茫然.当然这与我处在的环境有一定的关系. 处在这样的学校,想努力可是让我心凉的是没有一个老师肯真心带学生,, 学校办的各种事情都很坑,,我不怕自 ...
- 搭建Asp.Net MVC4
启动vs2012,开始创建一个新的web应用程序.使用菜单:“文件”>“新建项目” 请在左侧选择 Visual C#,然后选择ASP.NET MVC 4 Web 应用程序.命名您的工程为&quo ...
- select模式
在很多比较各种网络模型的文章中,但凡提到select模型时,都会说select受限于轮询的套接字数量,这个 数量也就是系统头文件中定义的FD_SETSIZE值(例如64).但事实上这个算不上真的限制. ...
- 对于WIFI版ipad(无GPS芯片)定位功能的释疑
把玩ipad(WIFI版ipad,无GPS芯片)很久时间了,曾今有很多人(包括我)也用过它的定位功能,发现它确实很准确,通常的误差在40米以内,所以很多人都怀疑这个版本的ipad是不是真的内置了GPS ...