我们知道大神们在设计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. linux常用命令(查看某些软件是否已安装)

    查看imap是否已安装 rpm -qa | grep imap 以下为未安装的情形: 检查是否已安装sendmail: rpm -qa | grep sendmail 以下为已安装的返回:

  2. JQuery 点击控件获取当前坐标时不兼容IE7

    现在要求在点击文本框时,获取文本框的坐标,需要相对文本框的位置来显示信息. 思路就是,绑定文本框的click 事件,一旦有点击就触发,去调用clickevent 函数执行计算. $('#txt_m') ...

  3. PHP android ios相互兼容的AES加密算法

    APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互. PHP的免费版phpAES项目,手机端解码各种不对. 好不容易找了PHP ...

  4. wdcp-apache开启KeepAlive提高响应速度

    因为我们的网站,媒体文件,js文件,css文件等都在同一个服务器上,并且,我们网站有非常多的图片,所以当建立好tcp链接之后,不应该马上关闭连接,因为每建立一次连接还要进行dns解析,以及启动一个ht ...

  5. 一些CMS网站系统漏洞,练手用(持续更新)

    仅供拿shell,提权测试用,请勿恶意破坏 XuSoft系统: 后台万能密码:'or'='or'  可直接登陆,后台地址 /manage/login.asp inurl:ReadArticlemb.a ...

  6. OC学习总结之面向对象和类

    OC学习总结之面向对象和类   Objective-c是c语言的母集合,它的原意就是在原始的c语言的主体上加入面向对象的特性.1.面向对象和面向过程  面向对象和面向过程是编程的两种思考方式.面向对象 ...

  7. frame,bounds,center-三者的含义

    frame与bounds的区别比较 frame,bounds,center-三者的含义 偶然觉的,这三个属性有时候定位的时候,需要用.于是就来搞清楚,到底frame,bounds,center 这三个 ...

  8. Ruby自学笔记(二)— Ruby的一些基础知识

    Ruby安装好之后,我们就可以来实践Ruby语言了. 以下是一些学习到的简单基础知识: 1. 如何执行Ruby文件? 我们编写的Ruby文件是以rb为后缀名的,例如:XXX.rb.当要执行ruby文件 ...

  9. ubuntu各版本的区别

    ubuntu.kubuntu以及xubuntu的区别Ubuntu默认是Gnome:KUbuntu用的是KDE,效果比较炫目,但是系统要求也较高XUbuntu用的是Xface,比较轻量,系统要求较低,推 ...

  10. CVE-2015-1635,MS15-034 漏洞测试

    HTTP.sys远程执行代码漏洞(CVE-2015-1635,MS15-034) 远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 H ...