#include<stream.h>
using namespace std;
//按引用传递提高效率
/**
*按值将对象传递给函数 与 按值从函数返回一个对象时,都将创建该对象的副本。 创建这些副本时,都要调用一个特殊的构造函数:复制构造函数
*函数返回时 临时对象将被销毁,将调用对象的析构函数。
* */
class SimpleCat{
public:
SimpleCat();
SimpleCat(SimpleCat&); //复制构造函数
~SimpleCat();
};
SimpleCat::SimpleCat(){
cout<<"simple constructor"<<endl;
}
SimpleCat::SimpleCat(SimpleCat&){
cout<<"copy ..simple constructor"<<endl;
}
SimpleCat::~SimpleCat(){
cout<<"simple desconstructor"<<endl;
}
SimpleCat functionOne(SimpleCat cat);
SimpleCat *functionTwo(SimpleCat *cat);
int main(){
cout<<"making a SimpleCat"<<endl;
SimpleCat catl; //调用构造函数
cout<<"calling functionOne"<<endl;
functionOne(catl); //将SimpleCat对象按值传递 并返回SimpleCat对象 所以调用两次复制构造函数
//返回时没有赋值给任何对象,副本将丢弃,调用析构函数, 其局部副本不在作用域时,再次调用析构函数
cout<<"calling functionTwo"<<endl;
functionTwo(&catl); // 按照引用传递 不会创建对象的副本 析构函数 构造函数都不会调用
return 0;
//catl 不在作用域时 调用析构函数
}
SimpleCat functionOne(SimpleCat cat){ //按值传递
cout<<"functionOne returning....."<<endl;
return cat;
}
SimpleCat *functionTwo(SimpleCat *cat){ //参数为对象的指针,返回一个指向对象的指针
cout<<"functionTwo returning....."<<endl;
return cat;
}
/**
* 输出结果:
* making a SimpleCat
simple constructor
calling functionOne
copy ..simple constructor
functionOne returning.....
copy ..simple constructor
simple desconstructor
simple desconstructor
calling functionTwo
functionTwo returning.....
simple desconstructor
*
* */
分享到:
相关推荐
例如,`Student1(int n, string nam, char s, int a, string ad):Student(n, nam, s)` 就是调用基类 Student 的构造函数,并传递参数 n、nam 和 s。 在执行派生类的构造函数时,首先调用基类的构造函数,然后再执行...
这里,`Base(value)`就是显式调用基类`Base`的构造函数,并传递参数`value`。 2. 默认调用无参数构造函数: 如果没有在派生类的初始化列表中指定,编译器会默认调用基类的无参数构造函数(如果存在的话)。例如:...
这种构造函数允许你在创建对象时传递参数,以便根据这些参数初始化对象的成员变量。这样可以避免使用全局或静态初始化,并且使代码更具可读性和可维护性。例如: ```cpp class MyClass { public: MyClass(int ...
在C++编程中,数据结构是理解和操作复杂数据的关键,而C++的构造函数与析构函数以及类型转换则是实现高效、安全代码的重要概念。这个压缩包中的资源着重讲解了这些核心主题,通过实例代码帮助学习者深入理解。 首先...
这里使用了组合构造函数,它将参数传递给基类的构造函数。Sprite类还包含了一个复制构造函数和一个赋值运算符重载,这在C++中用于支持复制语义,确保对象复制的正确性。赋值运算符重载在复制对象时被调用,用于处理...
拷贝构造函数的实现通常包括对类中各个成员的逐个复制,以确保新对象与原对象的数据一致。 拷贝构造函数的三种主要用法包括: 1. **直接初始化**:当创建一个新对象并用已存在对象进行初始化时,拷贝构造函数被调用...
- **深复制**:如果类中包含动态分配的资源(如动态数组或复杂对象),拷贝构造函数需要进行深复制,即为每个对象分配新的内存并复制数据,确保新旧对象独立。 **知识点二:自定义拷贝构造函数** 对于包含动态内存...
拷贝构造函数是C++中一个非常重要的概念,主要用于在对象之间进行深度复制,确保每个对象拥有自己独立的一份数据。拷贝构造函数通常在以下几种情况被调用: 1. 当一个新对象通过已存在的对象初始化时。 2. 当一个...
1. **对象作为函数参数**:当你将一个对象传递给函数或作为返回值时,如果函数接受或返回的是对象的引用或指针,那么复制构造函数可能被调用。 2. **数组和集合中的元素**:当对象是数组、向量或其他容器(如std::...
9. 带参数的构造函数允许在创建对象时传递初始化数据,而无参数的构造函数通常用于提供一个默认的实例化方式。 10. 函数重载允许在同一作用域内定义多个同名但参数列表不同的函数;构造函数重载是指在一个类中定义多...
2. 显式构造函数调用:可以使用成员初始化列表(member initialization list)来指定子对象的构造函数,并传递参数。这种方式可以提高效率,因为避免了默认构造后再赋值的额外开销。 三、派生类构造函数 1. 继承...
在C#编程语言中,多态性...通过基类构造函数传递参数,我们可以确保在初始化子类实例时,基类的数据成员也能得到正确的初始化。这不仅提高了代码的复用性,还降低了维护成本,使得程序更加易于理解和维护。
作者`yysyangyangyangshan`可能讨论了如何定义构造函数,何时调用它,以及如何通过构造函数传递参数来设置对象属性。文章可能还涵盖了类的其他重要概念,如方法、属性以及面向对象编程的基本原则。 除了`Class...
在C++编程中,拷贝构造函数是一个非常重要的概念,尤其对于那些处理复杂数据结构或资源管理的程序来说更是如此。拷贝构造函数是类的一种特殊成员函数,用于创建一个新对象作为已存在对象的副本。如果拷贝构造函数...
例如,考虑`Location`类,它定义了三个构造函数:无参构造函数、一个接受单个整数参数的构造函数以及一个接受两个整数参数的构造函数。 ```cpp class Location { private: int X, Y; public: Location(); // 无参...
在这个例子中,`Derived`是`Base`的派生类,`Derived(int val)`是派生类的构造函数,它调用了`Base`的构造函数,将`val`传递给基类以初始化基类的数据成员。 3. 调用顺序:在派生类的构造函数执行过程中,首先会...
构造函数与参数传递 构造函数是在创建对象时调用的一种特殊方法,用于初始化对象的状态。在这个例子中,我们定义了一个带有参数的构造函数,用于接收用户输入的圆的半径值,并将其赋值给类的成员变量`radius`。 `...
5. **默认构造函数**: 如果类中未明确定义任何构造函数,编译器会自动生成一个默认构造函数,该构造函数无参数且不执行任何操作。如果类中有至少一个用户定义的构造函数,那么编译器将不再提供默认构造函数。 **...