C++ 回忆录5 对象的构造方法
2012-07-27 16:38
316 查看
1.对象的构造方法跟类同名,而且没返回值.
2.如果没有提供一个默的构造器,编译器会帮我们合成一个默认的. 如果已经有了其他构造器的重载,那么就不再合成. 通常我们都自己写一个构造器,初始化成员变量. 否则,合成的构造器不会帮我们初始化成员build-in or compoud type变量, 此时就处决与这个类是在什么scope定义了.如果是在global 则,build-in or compoud type变量会初始化为0,如果是local scope,则是undefine. 而对于class member,则调用default constructor.
so best pratice is to write a default constructor by ourself.
3.构造器有一个初始话列表,虽然不是必需,但在某些环境还是需要的.
class A
{
public:
int m_int1;
int m_int2;
const int m_int3;
string m_str;
A():m_int2(0),m_int1(0),m_int3(111) //怕这个初始化列表,虽然m_int2 放在m_int1前面, 但其实初始化的顺序是按成员变量定义的顺序的.故m_int1 首先初始化.
//这里就显示出这初始化列表是必要的.m_int3; 是const 只能在初始化时赋值.在构造体里面的只是assign 的过程,不是初始化.
{
m_int2=10;//ok.
m_int3=111;// error.
}
A(const string & str="a string") //构造器参数也可以带default value
{
}
boolean istheSameA(A anotherObj);
};
4. A b(); //对于default construct 的使用,我们一般不这样来定义一个A对象, 这是一个方法的声明.
直接 :A b; 就可以了.不用在加括号. 或者 A b=A();//这样也行.
5.对象也可以有隐式的转换.
string aStr="this is a String";
A aObj;
aObj.istheSameA(aStr); //我们的member function 里面是没有带string para 的,而是一个A 对象,此时,implict conversion happen. in this case.
会调用 A(aStr) 生成一个A对象后,传递给istheSameA,
如果我们要prevent this conversion. 我们可以这样声明构造器, 在构造器声明前面加explicit 关键字,注意这个关键字只能用于构造器,成员function not suitable to use.
explicit A(constr string & str="a string")
{
}
此时我们只能这样调用:Obj.istheSameA(A(aStr));//显示的构造.
5.对于简单的类我们还可以这样去实例化.
class B
{
char * ptr;
int i;
};
B aBobj={"haha",125};
B aBobj2={0,0};
2.如果没有提供一个默的构造器,编译器会帮我们合成一个默认的. 如果已经有了其他构造器的重载,那么就不再合成. 通常我们都自己写一个构造器,初始化成员变量. 否则,合成的构造器不会帮我们初始化成员build-in or compoud type变量, 此时就处决与这个类是在什么scope定义了.如果是在global 则,build-in or compoud type变量会初始化为0,如果是local scope,则是undefine. 而对于class member,则调用default constructor.
so best pratice is to write a default constructor by ourself.
3.构造器有一个初始话列表,虽然不是必需,但在某些环境还是需要的.
class A
{
public:
int m_int1;
int m_int2;
const int m_int3;
string m_str;
A():m_int2(0),m_int1(0),m_int3(111) //怕这个初始化列表,虽然m_int2 放在m_int1前面, 但其实初始化的顺序是按成员变量定义的顺序的.故m_int1 首先初始化.
//这里就显示出这初始化列表是必要的.m_int3; 是const 只能在初始化时赋值.在构造体里面的只是assign 的过程,不是初始化.
{
m_int2=10;//ok.
m_int3=111;// error.
}
A(const string & str="a string") //构造器参数也可以带default value
{
}
boolean istheSameA(A anotherObj);
};
4. A b(); //对于default construct 的使用,我们一般不这样来定义一个A对象, 这是一个方法的声明.
直接 :A b; 就可以了.不用在加括号. 或者 A b=A();//这样也行.
5.对象也可以有隐式的转换.
string aStr="this is a String";
A aObj;
aObj.istheSameA(aStr); //我们的member function 里面是没有带string para 的,而是一个A 对象,此时,implict conversion happen. in this case.
会调用 A(aStr) 生成一个A对象后,传递给istheSameA,
如果我们要prevent this conversion. 我们可以这样声明构造器, 在构造器声明前面加explicit 关键字,注意这个关键字只能用于构造器,成员function not suitable to use.
explicit A(constr string & str="a string")
{
}
此时我们只能这样调用:Obj.istheSameA(A(aStr));//显示的构造.
5.对于简单的类我们还可以这样去实例化.
class B
{
char * ptr;
int i;
};
B aBobj={"haha",125};
B aBobj2={0,0};
相关文章推荐
- C++ 再谈string类型(1) 构造string对象的方法
- C++ 面向对象学习2 构造方法
- C++对象数组调用构造/析构函数的方法
- 常见对象_String类的构造方法
- 常见对象_String字面值对象和构造方法创建对象的区别
- 面向对象 构造方法 初始化对象
- 7 面向对象(成员变量和局部变量的区别,类作为形式参数的问题,匿名对象,封装,private关键字,this关键字,构造方法,类的初始化过程,static关键字)
- Java中类和对象和构造方法
- 1、c#中可以有静态构造方法,而java中没有,例如在单例模式中c#可以直接在静态构造中实例化对象,而java不可以
- C++对象模型之默认构造函数的构造操作
- C++第5周任务【任务2】本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为第10章做运算符重载等积累些感性认识。
- 随堂笔记7.29:对象,接口,构造方法,引用数据类型,抽象类,抽象方法-------1
- java 面向对象基础 UML图 构造方法 对象 参数传值 关联关系 依赖关系
- (转载)C++创建对象的两种方法
- java中类,对象,构造方法,封装的概念及描述
- Primer plus C++ 第十章 对象和类_类的设计进化_构造与析构
- OC基础day5-点语法、property、编译器指令、id万能指针、类与类的判断、判断对象是否响应指定的方法、判断类中是否有这个方法、参数方法与响应、构造方法、synthesize
- 关于Java new对象构造方法执行顺序 解释恶汉单例模式死循环问题
- java笔记 chapter3 对象,抽象,package,import,权限修饰符,属性,方法,构造方法
- 反射机制的概述和字节码对象的获取方式 JavaBean的概述&BeanUtils的使用 反射操作构造方法、成员方法、成员属性