构造函数实例一

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>面向对象编程</title>
</head>
<body>
	<script type="text/javascript">
		function Cat(name,age,color){
			this.name=name;
			this.age=age;
			this.color=color;
			this.catchMouse=function(){
                console.log(this.name+'抓老鼠');
			};
		}
		var c=new Cat('花花',2,'花色');

		console.log(c.name,c.age,c.color);
		c.catchMouse();
	</script>

</body>
</html>

 

<think>好的,用户想知道C++中四种构造函数的示例代码。首先,我需要回忆C++中的构造函数类型。根据知识库里的引用,特别是引用[2]提到有六种构造函数,但用户问的是四种。可能需要明确常见的四种类型。常见的构造函数包括默认构造函数、参数化构造函数、拷贝构造函数和移动构造函数。不过引用[2]中还提到委托构造函数,但可能用户指的是这四种基本类型。 先确认用户的问题:四种构造函数可能的分类。比如默认构造、参数化构造、拷贝构造、委托构造?或者是否包含移动构造?根据引用[3]中的例子,他们展示了不同的构造函数,包括参数化、拷贝构造,但没有移动构造。不过用户可能需要更基础的分类。 根据引用[4],析构函数的相关知识,但构造函数部分在引用[2]和[3]。例如引用[2]提到委托构造函数是C++11的特性,属于其中种。用户可能想了解默认、参数化、拷贝和委托构造函数这四种。需要结合这些信息来生成示例代码。 接下来需要为每种构造函数编写示例。例如: 1. 默认构造函数:无参数,初始化对象。 2. 参数化构造函数:带参数的构造函数。 3. 拷贝构造函数:使用同类对象初始化新对象。 4. 委托构造函数:调用同类中的其他构造函数,减少代码重复。 需要确保代码正确,比如拷贝构造函数的参数应为const引用。同时,析构函数也需要正确编写,如引用[4]中的示例,释放资源。 需要注意用户可能对移动构造函数不太熟悉,但问题只问四种,所以可能不包括移动构造。但需要确认是否用户的需求是否覆盖。根据引用中的信息,用户提供的引用中没有提到移动构造,所以可能暂时不考虑。 然后,编写代码示例。例如: class MyClass { public: // 默认构造函数 MyClass() : data(0) {} // 参数化构造函数 MyClass(int value) : data(value) {} // 拷贝构造函数 MyClass(const MyClass& other) : data(other.data) {} // 委托构造函数,调用参数化构造函数 MyClass(double d) : MyClass(static_cast<int>(d)) {} private: int data; }; 同时,在main函数中创建不同实例,展示构造函数的调用情况。例如: MyClass obj1; // 默认构造 MyClass obj2(10); // 参数化构造 MyClass obj3(obj2); // 拷贝构造 MyClass obj4(3.14); // 委托构造 还需要注意析构函数的调用顺序,如引用[3]中提到的,对象销毁时析构函数按相反顺序调用。 此外,引用[4]中的析构函数示例展示了资源释放,因此在代码示例中可能需要添加析构函数的实现,比如输出信息,方便观察调用过程。 最后,生成相关问题,如性能优化、应用场景等,参考用户提供的示例问题结构。 确保代码符合LaTeX格式要求,行内公式用$,独立公式用$$,但当前问题可能不需要数学公式,重点在代码示例。但如果有涉及数学的地方需要注意格式。</think>### C++ 四种构造函数示例 在 C++ 中,构造函数用于初始化对象。常见的四种构造函数类型包括 **默认构造函数**、**参数化构造函数**、**拷贝构造函数** 和 **委托构造函数**。以下是代码示例: ```cpp #include <iostream> using namespace std; class Example { private: int value; string name; public: // 1. 默认构造函数(无参数) Example() : value(0), name("default") { cout << "默认构造函数调用" << endl; } // 2. 参数化构造函数(带参数) Example(int v, const string& n) : value(v), name(n) { cout << "参数化构造函数调用: " << name << endl; } // 3. 拷贝构造函数(通过同类对象初始化) Example(const Example& other) : value(other.value), name(other.name + "_copy") { cout << "拷贝构造函数调用: " << name << endl; } // 4. 委托构造函数(C++11特性,调用参数化构造函数) Example(int v) : Example(v, "delegated") { cout << "委托构造函数调用" << endl; } // 析构函数(用于资源清理) ~Example() { cout << "析构函数调用: " << name << endl; } void print() { cout << "value: " << value << ", name: " << name << endl; } }; int main() { Example obj1; // 调用默认构造函数[^3] Example obj2(10, "obj2"); // 调用参数化构造函数 Example obj3(obj2); // 调用拷贝构造函数 Example obj4(20); // 委托构造函数 → 参数化构造函数[^2] return 0; } ``` #### 代码说明 1. **默认构造函数** 当对象无参数初始化时调用,例如 `Example obj1;`。若未显式定义,编译器会自动生成个默认构造函数[^4]。 2. **参数化构造函数** 通过传入参数初始化成员变量,例如 `Example obj2(10, "obj2");`。 3. **拷贝构造函数** 通过同类对象初始化新对象,例如 `Example obj3(obj2);`。参数必须为 `const` 引用以避免无限递归[^3]。 4. **委托构造函数** 在构造函数中调用同类其他构造函数(C++11 特性),例如 `Example(int v)` 委托给 `Example(int v, string n)`。 5. **析构函数** 对象销毁时自动调用,按创建顺序的逆序执行[^3]。 #### 输出示例 ``` 默认构造函数调用 参数化构造函数调用: obj2 拷贝构造函数调用: obj2_copy 参数化构造函数调用: delegated 委托构造函数调用 析构函数调用: delegated 析构函数调用: obj2_copy 析构函数调用: obj2 析构函数调用: default ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值