构造函数(复习笔记)
推荐 原创
©著作权归作者所有:来自51CTO博客作者cince的原创作品,谢绝转载,否则将追究法律责任
呵~软考要来了~怕怕~赶紧复习一下. ^_^
构造函数是C++中的重点.也是难点.
构造函数是用来创建对象的.而默认的构造函数是在没有提示显示的初始化的时候才会出现的.
默认的构造函数可以用于以下的声明:
Example Test_A; //Example 是类. //这句是声明了一个对象Test_A
注意:当且仅当没有任何构造函数的时候.C++才会自动添加默认的构造函数.是不做任何的工作的.
这里做一个假设.假设你有提供了一个非默认的构造函数.却没有对这个构造函数进行定义.那么上面那条声明语句: Example Test_A;就会出错.出错的原因是:不禁止创建未初始化的对象.从这句话也可以看出来构造函数的用处了.说白了点构造函数是用来创建和初始人对象用的.
如果程序员自己定义了一个非默认的构造函数.如何让上面那条语句合法呢?
定义默认构造函数的二种方法:
1. 给已有的构造函数的所有参数都进行定义.
例:example(int a=0,int b=0,int c=0);
2. 定义一个没有参数的构造函数.(这其实就是我们所说的函数重载了.是对C++自动加上构造函数overload)
例:
example()
{
//这里面就可以对成员进行初始化了.
int a=0,b=0,c=0;
}
这种是标准的写法.当然也可以这样子写了:
example()::a(0),b(0),c(0){} //这做写法看起来比较帅.
这两个是等同.
一个类中只能有一个默认的构造函数.也就是说.上面的二种方法是不可以同时进行的.
注意:构造函数没有传回数据类型,连void也没有.也就是说构造函数没有声明的类型
好程序的风格:在定义默认的构造函数的时候就应该初始对象.确保有一个已知的.合理的.合法的值.
默认的构造函数通常是给所有的成员提供隐式的初始值.
使用以上的任何一种方法都可以声明对象变量.而且不需要进行显示的初始化.
例: Example Test_A;
Example Test_B= Example ();
Example *ptr=new Example;
对于第1个方法:不可以这样子进行定义:
假设:a,b,c是类的私有成员.那么. Example(int a=0,int b=0,int c=0)是错误的.因为函数的参数不能够表示类的成员.而是赋值给类的成员的值.因此.函数的参数是不能够与类的成员相同.
好程序的风格:为了避免这种情况的发生.可以在类的成员前面加上m_前缀.来进行区分. m_a,m_b,m_c;
For Example:
Example Test_C(“concrete conglomerate”);//这个声明是调用非默认构造函数,即接受参数的构造函数;
Example Test_D();//这个声明指出:Test_D是一个返回Example对象的函数.
Example Test_E;//这个声明是调用默认的构造函数.不要用圆括号的.
当我们对对象进行定义时候.如:Explam Test_C; 这时候缺省的构函数就会被调用.
在<<on to C++>>这书中也写的相当的详细:
[quote start]
How to define constructor member function
In class definitions ,default constructor functions stand apart from other member functions in three ways:
1. The default constructor function’s name is the same as the name of class
2. The default constructor function has no return-value data type
3. The default constructor function cannot have a parameter.
[quote end]
Now following a class:
const double pi=3.14;
class Test_A
{
public:
double radius,length;
Test_A (){radius=2.0;length=4.0;}
//constructor with two parameters
Test_A(double r,double l){ radius=r;length=l;}
double volume(){return pi*radius*radius*length;}
}
Qustions:
1. Is it worng?
2. Where is the private member?
---
Next anonymous constructor and copy constructor and so on.
To be continue..
上一篇:电脑迷的来信
下一篇:二分查找算法(复习笔记)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
C++构造函数复习
#include using namespace std;class Element{ public: Element(int e = 12) : elem
c++ include class g++ ios -
母函数复习笔记
感觉很久没看母函数了,今天复习了下。(1+X+X^2+X^3+.....)*()*()*()*(),一
多项式 #include 母函数 -
复习笔记
复习笔记
C/C++ 复习笔记 -
js构造函数学习笔记
js中的构造函数可用来创建特定类型的对象,像Object和Array的原生构造函数,在运行时会自动出现在执行环境中,
函数 对象 构造函数 作用域 操作符
















