我们知道大神们在设计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(缺省的六大函数)的更多相关文章

  1. C++命名空间、函数重载、缺省参数、内联函数、引用

    一 .C++入门 1.C++关键字 2.命名空间 3.C++输入&输出 4.缺省参数 5.函数重载 6.引用 7.内联函数 8.auto关键字 9.基于范围的for循环 10.指针空值null ...

  2. c++ 切勿重新定义继承来的带缺省参数的函数

    切勿重新定义继承来的带缺省参数的函数.我们知道,继承来的函数是virtual 的,至于原因在上一节中已经说明了,即“切勿重新定义父类non-virtual函数”.所以确切的描述应该是“切勿重新定义继承 ...

  3. OpenGL函数思考-glColor

    http://blog.csdn.net/shuaihj/article/details/7231980 OpenGL函数思考-glColor 函数原型:      glColor3b,glColor ...

  4. 像计算机科学家一样思考python-第3章 函数

    在程序设计中,函数是指用于进行某种计算的一系列语句的有名称的组合.定义一个函数时,需要指定函数的名称并写下一系列程序语句.之后,就可以使用名称来“调用”这个函数 3.1函数调用 一个函数调用的例子 & ...

  5. Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt

    PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...

  6. epoll函数及三种I/O复用函数的对比

    epoll函数 #include <sys/epoll.h>int epoll_create(int size)int epoll_ctl(int epfd, int op, int fd ...

  7. Android 回调函数的理解,实用简单(回调函数其实是为传递数据)

    作者: 夏至,欢饮转载,也请保留这段申明 http://blog.csdn.net/u011418943/article/details/60139910 一般我们在不同的应用传递数据,比较方便的是用 ...

  8. 关于MFC中重载函数是否调用基类相对应函数的问题

    在重载CDialog的OnInitDialog()函数的时候,在首行会添加一句:CDialongEx::OnInitDialog();语句,这是为什么呢?什么时候添加,什么时候不添加? 实际上,我们在 ...

  9. 百万年薪python之路 -- 内置函数二 -- 最常用的内置函数

    1.内置函数 1.1 匿名函数 匿名函数,顾名思义就是没有名字的函数(其实是有名字的,就叫lambda),那么什么函数没有名字呢?这个就是我们以后面试或者工作中经常用匿名函数 lambda,也叫一句话 ...

随机推荐

  1. IE6中的常见BUG与相应的解决办法

    开发前端的同学一定都知道,IE6是兼容BUG最多的浏览器,它不支持PNG alpha通道暂且不论.其文档的解析理解规范也引起了诸多恼人的BUG,有时甚至让人感到绝望.本文主要讲解一些比较容易遇到的IE ...

  2. [转] 使用CSS3 will-change提高页面滚动、动画等渲染性能 ---张鑫旭

    一.先来看一个例子 下面这个例子来自某外文,我这里简单转述下. 视差滚动现在不是挺流行的嘛,然后Chris Ruppel当其使用background-attachment: fixed实现背景图片不随 ...

  3. vertical-align:top属性

    vertical-align这个是设置元素的垂直排列的. 用来定义行内元素的基线相对于该元素所在行的基线的垂直对齐. 它的值比较多:baseline | sub | super | top | tex ...

  4. 【Linux】常用命令

    一.文件结构     /:       根目录 /bin:    系统所需要的那些命令位于此目录. /boot:   Linux的内核及引导系统程序所需要的文件目录,GRUB或LILO系统引导管理器也 ...

  5. ibatis 环境搭建(1)

    目录和jar包

  6. bzoj3047: Freda的传呼机 && 2125: 最短路

    Description 为了随时与rainbow快速交流,Freda制造了两部传呼机.Freda和rainbow所在的地方有N座房屋.M条双向光缆.每条光缆连接两座房屋,传呼机发出的信号只能沿着光缆传 ...

  7. python 性能鸡汤

    转载自:http://www.oschina.net/question/1579_45822 1:使用内建函数input() int() isinstance() issubclass() iter( ...

  8. couchdb and redis

    http://www.jdon.com/artichect/scalable5.html http://www.dedecms.com/knowledge/data-base/nosql/2012/0 ...

  9. XML CDATA

    /* <![CDATA[ */var mv_dynamic_to_top = {"text":"To Top","version":& ...

  10. LINUX下安装ORACLE,完全搞定

    参考文档: http://www.tuicool.com/articles/eE3mmy http://blog.chinaunix.net/uid-11209572-id-3599052.html