默认产生的类成员函数

本文介绍C++中空类的默认成员函数,包括构造函数、析构函数及取址运算符等,并通过示例代码展示这些成员函数是如何被隐式定义的。
C++的空类有哪些成员函数:
. 缺省构造函数。
. 缺省拷贝构造函数。
. 缺省析构函数。
. 缺省赋值运算符。
. 缺省取址运算符。
. 缺省取址运算符 const。

    注意:有些书上只是简单的介绍了前四个函数。没有提及后面这两个函数。但后面这两个函数也是空类的默认函数。另外需要注意的是,只有当实际使用这些函数的时候,编译器才会去定义它们。



#include<iostream>
using namespace std;

class class1
{
public:
	class1(){}//缺省构造函数

	class1(const class1&){}//拷贝构造函数

	~class1(){}//析构函数

	class1&operator=(const class1&){}//赋值运算符

	class1*operator&(){}//取址运算符

	const class1*operator&()const{}//取址运算符 const

};

//空类class2会产生class1一样的成员函数

class class2
{
};

void main()
{
	class2 obj1;//缺省构造函数
	class2 obj2;

        obj1=obj2;//赋值运算符

	&obj2;//取址运算符

        class2 obj3(obj1);//拷贝构造函数

        class2 const obj4;
	&obj4;//取址运算符 const

}


### 定义 在C++中,的成员函数同样可以设置默认参数。默认参数是指在函数定义或声明时为函数的参数指定一个默认值。当调用该函数时,如果没有提供该参数的值,就会使用默认值。 ### 使用方法 以下是一个函数使用默认参数的示例: ```cpp #include <iostream> class Example { public: // 成员函数设置默认参数 void printInfo(int num = 0, const char* str = "default") { std::cout << "Number: " << num << ", String: " << str << std::endl; } }; int main() { Example obj; obj.printInfo(); // 不提供参数,使用默认值 obj.printInfo(10); // 提供一个参数,另一个使用默认值 obj.printInfo(20, "custom"); // 提供两个参数,不使用默认值 return 0; } ``` 在上述代码中,`printInfo` 是 `Example` 的成员函数,它的两个参数都设置了默认值。在 `main` 函数中,对 `printInfo` 函数进行了不同方式的调用,展示了默认参数的使用。 ### 注意事项 - **默认参数的位置**:默认参数必须从右向左连续设置。例如: ```cpp class Test { public: // 正确,默认参数从右向左连续 void func(int a, int b = 2, int c = 3) {} // 错误,默认参数不连续 // void func2(int a = 1, int b, int c = 3) {} }; ``` - **声明和定义中的默认参数**:如果函数内声明,在外定义,默认参数只能在声明中指定,不能在定义中重复指定。例如: ```cpp class MyClass { public: // 在声明中指定默认参数 void myFunction(int x = 10); }; // 在定义中不能再指定默认参数 void MyClass::myFunction(int x) { // 函数体 } ``` - **与函数重载的关系**:默认参数可以和函数重载一起使用,但要注意避免产生二义性。例如: ```cpp class OverloadExample { public: void func(int a) { std::cout << "One parameter: " << a << std::endl; } void func(int a, int b = 10) { std::cout << "Two parameters: " << a << ", " << b << std::endl; } }; int main() { OverloadExample obj; obj.func(5); // 调用第一个函数 obj.func(5, 20); // 调用第二个函数 return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值