关于C++函数思考1(缺省的六大函数)
我们知道大神们在设计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);//2
S(10.8); //3
S((int)10.8);//4 S ss(10,20);//5
S ss1(10.8);//6
S ss2((int)10.8);//7 S s(10,10.8);//8 //调用了构造函数
S s1 = (S)(10,10.8);//9
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FpOHdlaQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
下来我们验证一下:
/**********************************************************************
* * 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);//1 S ss(10,20);//2
S ss1(10.8);//3
S ss2((int)10.8);//4 S s(10,10.8);//5
S s1 = (10,10.8);//6
S s2; //7
s2=(10,10.8); }
关于C++函数思考1(缺省的六大函数)的更多相关文章
- C++命名空间、函数重载、缺省参数、内联函数、引用
一 .C++入门 1.C++关键字 2.命名空间 3.C++输入&输出 4.缺省参数 5.函数重载 6.引用 7.内联函数 8.auto关键字 9.基于范围的for循环 10.指针空值null ...
- c++ 切勿重新定义继承来的带缺省参数的函数
切勿重新定义继承来的带缺省参数的函数.我们知道,继承来的函数是virtual 的,至于原因在上一节中已经说明了,即“切勿重新定义父类non-virtual函数”.所以确切的描述应该是“切勿重新定义继承 ...
- OpenGL函数思考-glColor
http://blog.csdn.net/shuaihj/article/details/7231980 OpenGL函数思考-glColor 函数原型: glColor3b,glColor ...
- 像计算机科学家一样思考python-第3章 函数
在程序设计中,函数是指用于进行某种计算的一系列语句的有名称的组合.定义一个函数时,需要指定函数的名称并写下一系列程序语句.之后,就可以使用名称来“调用”这个函数 3.1函数调用 一个函数调用的例子 & ...
- Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt
PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...
- epoll函数及三种I/O复用函数的对比
epoll函数 #include <sys/epoll.h>int epoll_create(int size)int epoll_ctl(int epfd, int op, int fd ...
- Android 回调函数的理解,实用简单(回调函数其实是为传递数据)
作者: 夏至,欢饮转载,也请保留这段申明 http://blog.csdn.net/u011418943/article/details/60139910 一般我们在不同的应用传递数据,比较方便的是用 ...
- 关于MFC中重载函数是否调用基类相对应函数的问题
在重载CDialog的OnInitDialog()函数的时候,在首行会添加一句:CDialongEx::OnInitDialog();语句,这是为什么呢?什么时候添加,什么时候不添加? 实际上,我们在 ...
- 百万年薪python之路 -- 内置函数二 -- 最常用的内置函数
1.内置函数 1.1 匿名函数 匿名函数,顾名思义就是没有名字的函数(其实是有名字的,就叫lambda),那么什么函数没有名字呢?这个就是我们以后面试或者工作中经常用匿名函数 lambda,也叫一句话 ...
随机推荐
- topcoder算法练习3
SRM144 DIV1 1100 point Problem Statement NOTE: There are images in the examples section of this ...
- 对象的内置属性和js的对象之父Object()
js中对象有constructor,valueOf(),toString()等内置属性和方法; 创建一个空对象的方法: var o = {}; 或者 var o= new Object(); o.co ...
- Telerik_2012_Q3 破解全套下载链接
1.Telerik_OpenAccess_ORM_2012_3_1012_SDK.zip (暂未提供下载) 2. Telerik_OpenAccess_ORM_2012_3_1012.zip 3. T ...
- iPad和iPhone开发的比较
一.iPad简介 1.什么是iPad 一款苹果公司于2010年发布的平板电脑 定位介于苹果的智能手机iPhone和笔记本电脑产品之间 跟iPhone一样,搭载的是iOS操作系统 2.iPad的市场情况 ...
- Java中的自动拆箱装箱(Autoboxing&Unboxing)
一.基本类型打包器 1.基本类型:long.int.double.float.boolean 2.类类型:Long.Integer.Double.Float.Boolean 区别:基本类型效率更高,类 ...
- Apache虚拟站点配置
简单虚拟站点配置: <VirtualHost 127.0.0.2:80> DocumentRoot E:/wamp/www/yue ServerName 127.0.0.2:80</ ...
- 关于Verilog 中的for语句的探讨
在C语言中,经常用到for循环语句,但在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别. 在Verilog中除了在Testbench(仿真测试激励)中使用for循环语句外,在Test ...
- 求助:对话框下OnInitDialog中使用SetTimer无效
原文地址:http://www.w3c.com.cn/%E6%B1%82%E5%8A%A9%EF%BC%9A%E5%AF%B9%E8%AF%9D%E6%A1%86%E4%B8%8Boninitdial ...
- jQuery折叠风琴
这个效果用jQuery做是很方便的,根本不需要搞得很复杂. 网上有些效果DEMO不仅用了jQuery还引用一两个封装文件,真是匪夷所思. 最初想到了toggle: jQuery(document).r ...
- MySQL使用rand函数实现随机数
sql 的随机函数newID()和RAND() sql server的随机函数newID()和RAND() SELECT * FROM Northwind..Orders ORDER BY NEWID ...