我们知道大神们在设计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. nginx 跨域。。。掉坑里了,小心

    今天公司产品一个功能突然挂掉了...向客户演示之前出现了,手机端显示不能获取下载资源,可是急坏了一票人.. 通过手机端,调查服务器地址调用了http:/2342342.domain.hostname. ...

  2. dedecms 文章内容文章名字和文章网址的调用

    文章标题: <a href="{dede:field name='arcurl'/}">{dede:field.title/}</a> 本文章网址: < ...

  3. 英语学习App演示

  4. GC的前世与今生

    GC的前世与今生 虽然本文是以.net作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是 ...

  5. codeforces Minesweeper 1D

    题意:就是挖地雷,给你一个字符串,‘*’代表地雷,‘1’代表在它的周围有1个地雷,‘2’代表在左右都有个地雷,‘?’代表不确定是不是地雷,可以是1,2,*,问你最后有几种方式确定所有的的地雷. 思路: ...

  6. hdu 5150 Sit sit sit

    http://acm.hdu.edu.cn/showproblem.php?pid=5151 直接判断是不是素数,然后再注意1就行. #include <cstdio> #include ...

  7. struts2 Convention插件零配置,使用注解开发

    从struts21开始,struts2不再推荐使用codebehind作为零配置插件,而是改用Convention插件来支持零配置.与以前相比较,Convention插件更彻底. 使用Conventi ...

  8. aix ipcs使用说明

    ipcs: -q   Writes information about active message queues -o             Writes the following usage ...

  9. 【HDOJ】5128

    暴力+计算几何. /* 5128 */ #include <iostream> #include <algorithm> #include <cstdio> #in ...

  10. ♫【JS模式】偏函数

    <深入浅出Node.js> var toString = Object.prototype.toString var isType = function(type) { return fu ...