关于C++函数思考1(缺省的六大函数)
来源:互联网 发布:base64 java 编辑:程序博客网 时间:2024/06/05 21:31
我们知道大神们在设计C++时候就给C++有六个默认的函数,所谓默认就是,无需我们这些程序员们动手去写,只要你在将类实例化,即创建一个对象,在利用对象进行数据操作时候,就会编译器自动调用默认的函数,但是默认函数并不是C++希望我们使用的,真正强大的是我们在这些默认的基础之上,自己 DIY函数来实现默认函数所不能做到的和它能做到,只有这样才能将自己的功力大增。下面是我在编写C++ 函数时候产生的一些思考:
六个默认的函数依次是:
//C++ 的六个默认函数//在使用的时候那些函数时透明的,就是那些函数学了一招隐身技术 啊哈哈哈啊 class Default{public:/* Default(){}//缺省构造函数Default(const Default&){}//拷贝构造函数 ~Default(){}//析构函数 Default& operator=(const Default&){}//赋值运算符 Default* operator&(){}//取址运算符 const Default* operator&()const{}//取址运算符 const*/private:int m_Data; };int main(){ Default t;//调用构造函数Default t1=t;//Default t1(t);//调用拷贝构造函数 Default t2;t2=t; //调用赋值函数Default *pt = &t;//调用取址函数const Default t3;const Default *pt1 = &t3;//调用const取址函数 //调用析构函数return 0;}
C++的强大之处不在于有多少默认缺省的封装的方法,而是,在与在满足这些基本函数的基础上给予编程者最大的创造空间。这些默认的函数只能保证C++的正常模式,在此基础之上有极大的接口空间来设计与实现方法
1.我们看一个程序
/********************************************************************** * * Copyright (c)2015,WK Studios * * Filename: A.h* * Compiler: GCC vc 6.0 * * Author:WK * * Time: 2015 4 5 * **********************************************************************/#include<iostream>using std::cout;using std::cin;class S{public://当使用自定义构造函数的时候编译器就不会调用默认的构造函数 S(int i=0,double n=0):m_data(i),data(n){cout<< this<<"\n";}private:int m_data; double data;};int main(){S s0; //1 //此时就是我们自定义了构造函数编译器就不会再调用默认的无参构造函数, //如果想要这么做,必须自定义一个无参构造函数,或者自定义缺省的构造函数, //就像上面函数的那样,也就是说如果么有缺省值,就会报错,因为找不到对应的构造函数S(10);//2S(10.8); //3S((int)10.8);//4S ss(10,20);//5S ss1(10.8);//6S ss2((int)10.8);//7S s(10,10.8);//8 //调用了构造函数S s1 = (S)(10,10.8);//9}
下来我们验证一下:
/********************************************************************** * * Copyright (c)2015,WK Studios * * Filename: A.h* * Compiler: GCC vc 6.0 * * Author:WK * * Time: 2015 4 5 * **********************************************************************/#include<iostream>using std::cout;using std::cin;class S{public://当使用自定义构造函数的时候编译器就不会调用默认的构造函数 //explicit 只对构造函数起作用,用来抑制隐式转换。 S(int i=0,double n=0.0):m_data(i),data(n){ cout<<"Create S obj:"<< this<<"\n";}S(const S &t){cout<<"Copy Test Obj : "<<this<<"\n";m_data = t.m_data;}S& operator=(const S &t){cout<<"Assgin:"<<this<<" : "<<&t<<"\n";if(this != &t){m_data = t.m_data;}return *this;}~S(){cout<<"Free S Obj :"<<this<<"\n";}private:int m_data; double data;};int main(){S(10);//1S ss(10,20);//2S ss1(10.8);//3S ss2((int)10.8);//4S s(10,10.8);//5 S s1 = (10,10.8);//6S s2; //7s2=(10,10.8);}
1 1
- 关于C++函数思考1(缺省的六大函数)
- c++中的六大缺省函数
- 关于缺省构造函数
- 关于C语言字符串函数的思考
- 关于C语言字符串函数的思考
- 函数的缺省参数
- 函数的缺省参数
- 函数的缺省参数
- 函数的缺省参数
- #1关于函数参数变量的思考
- 缺省函数
- 关于隐式提供缺省构造函数的一个误区
- C++ Primer中关于缺省构造函数的叙述
- 关于隐式提供缺省构造函数的一个误区
- 关于C++带有缺省参数的构造函数
- 程序基础关于C语言字符串函数的思考
- 关于C函数memcpy的实现细节思考
- 关于C语言中free函数的一点思考
- Android四大组件之一之service
- 基于STM32的函数信号发生器设计(下:软件设计)
- [模拟][NOIP2010] 机器翻译
- Cocos2d-x的学习之旅(一)扫盲篇
- HDU1864
- 关于C++函数思考1(缺省的六大函数)
- IDF实验室-抓到一只苍蝇
- IOS CoreText.framework --- 基本用法
- C++刷题——线段分割平面
- html中重点注意事项
- sql语言和一般编程语言区别
- Java--面向对象的特性(封装,继承,多态)学习
- Popup显示谷歌地图Marker
- HDU1231