关于C++函数思考1(缺省的六大函数)

本文探讨了C++中的六个默认函数,强调了虽然编译器会自动调用这些函数,但真正的力量在于程序员如何根据需求扩展和定制它们。C++的强大在于其允许在默认功能基础上进行创新。文章通过示例程序展示了如何验证默认函数的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       我们知道大神们在设计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
}


下来我们验证一下:

/**********************************************************************    
* *   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);

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值