我们知道大神们在设计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. poj 1087.A Plug for UNIX (最大流)

    网络流,关键在建图 建图思路在代码里 /* 最大流SAP 邻接表 思路:基本源于FF方法,给每个顶点设定层次标号,和允许弧. 优化: 1.当前弧优化(重要). 1.每找到以条增广路回退到断点(常数优化 ...

  2. 人人网FED CSS编码前端开发规范

    文件相关规范 1.文件名必须由小写字母.数字.中划线-组成 2.文件必须用utf-8编码 3.文件引入可通过外联或内联方式引入: 3.1 外联方式:<link rel=”stylesheet” ...

  3. C# 跨线程访问控件

    this.BeginInvoke(new Action(() => { this.StatusProgressBar_ExecutingTaskStatus.Value = (int)value ...

  4. PHPMailer发匿名邮件及Extension missing: openssl的解决

    原文链接:http://www.tongfu.info/phpmailer%E5%8F%91%E5%8C%BF%E5%90%8D%E9%82 %AE%E4%BB%B6%E5%8F%8Aextensio ...

  5. PHP学习之中数组-遍历一维数组【2】

    在PHP学习之中数组[1]中学会怎么创建一个数组,如果PHP学习之中数组[1]中的元素多的话,我们访问元素又是一个问题了,下面我们就使用for语句while,foreach来遍历我们的数组: < ...

  6. bzoj2096: [Poi2010]Pilots

    Description Tz又耍畸形了!!他要当飞行员,他拿到了一个飞行员测试难度序列,他设定了一个难度差的最大值,在序列中他想找到一个最长的子串,任意两个难度差不会超过他设定的最大值.耍畸形一个人是 ...

  7. PowerShell使用SMTP发送邮件

    $smtpServer = "smtp.exmail.qq.com" $smtpUser = "xxxxx@qq.com" $smtpPassword = &q ...

  8. 怎样找到native speaker的感觉

  9. Ferry Loading||

    uva10440:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&am ...

  10. Catenyms

    poj2337:http://poj.org/problem?id=2337 题意:给定一些单词,如果一个单词的尾字母与另一个的首字母相同则可以连接.问是否可以每个单词用一次,将所有单词连接,可以则输 ...