【C++学习】构造函数、拷贝构造函数、析构函数小结
来源:互联网 发布:美国cia大数据服务公司 编辑:程序博客网 时间:2024/06/06 08:39
一、构造函数
1.构造函数没有返回值,不能有return语句,不能为其定义返回类型,包括void类型在内。
2.构造函数是类的成员函数,具有一般成员函数的所有性质——可访问类的所有成员,可以是内联函数,可带形参,可带默认的形参值,可重载。
3.不能在类定义时给成员变量赋初值,通常使用构造函数来进行。
4.构造函数的主要功能是为对象分配存储空间。若在类中没有定义构造函数,则会生成默认构造函数,这个函数只能给对象开辟存储空间,不能对数据成员赋初值。
下面是构造函数使用实例:
/*构造函数——(1)构造函数重载*/#include <iostream>using namespace std;class Point{private:double x, y;//int z = 6; //不能在类定义时给成员变量赋值public:Point();//声明不带参数的构造函数Point(double fx, double fy);//重载构造函数void print();};Point::Point() {x = 0.0;y = 0.0;}Point::Point(double fx, double fy){x = fx;y = fy;}void Point::print(){cout << x << "\t" << y <<endl;}void main(){Point p1;Point p2(3,5);cout << "the x and y of p1:" << "\t";p1.print();cout << "the x and y of p2:" << "\t";p2.print();system("pause");}
运行结果如下:
上述程序中,若在类定义中去掉Int z=0的注释;并将 print() 函数定义改成:cout << x << "\t" << y <<"\t"<<z<< endl; 则出现如下结果:
这与书中的结论——“不能在类定义时给成员变量赋初值”相悖,也许是编译器的问题或是其他的原因,这点留待以后探究。
/*构造函数——(2)声明带默认参数的构造函数*/#include <iostream>using namespace std;class Point{private:double x, y;public:Point(double fx = 0.0, double fy = 1.1);//声明带默认参数的构造函数//Point();//声明了上一行时,若再声明这个构造函数,则编译 Point p1;会出错,显示"类Point包含多个默认构造函数,对重载函数的调用不明确"void print();};Point::Point(double fx, double fy){x = fx;y = fy;}void Point::print(){cout << x << "\t" << y << endl;}void main(){Point p1;Point p2(3);Point p3(5, 6);cout << "the x and y of p1:" << "\t";p1.print();cout << "the x and y of p2:" << "\t";p2.print();cout << "the x and y of p3:" << "\t";p3.print();system("pause");}运行结果如下:
二、拷贝构造函数
拷贝构造函数在一下三种情况下会被调用:
1.用类的一个对象去初始化该类的另一个对象。
2.类的对象作为函数的形参。
3.类的对象作为函数的返回值。
下面是拷贝构造函数使用实例:
/*拷贝构造函数——拷贝构造函数被调用的三种情况*/#include <iostream>using namespace std;class Point{private:int x, y;public:Point(int m = 2, int n = 3); //定义构造函数(带默认参数的)Point(Point &p); //声明拷贝构造函数int getx();int gety();};Point::Point(int m, int n){x = m;y = n;}Point::Point(Point &p) //定义拷贝构造函数{static int i = 1;x = p.x + 10;y = p.y + 20;cout << "第" << i++ << "次调用拷贝构造函数后:"<<"\t" ;}int Point::getx(){return x;}int Point::gety(){return y;}void f(Point p) //对象作形参{cout << p.getx() << "\t" << p.gety() << endl;}Point g() //对象作返回值{Point p(5, 6);return p;}void main(){Point p1; //调用构造函数创建对象p1cout << p1.getx() << "\t" << p1.gety() << endl;Point p2(p1); //调用拷贝构造函数的第一种情况cout << p2.getx() << "\t" << p2.gety() << endl;f(p2); //调用拷贝构造函数的第二种情况——对象作形参Point p3 = g(); //调用拷贝构造函数的第三种情况——对象作返回值cout << p3.getx() << "\t" << p3.gety() << endl;system("pause");}
运行结果如下:
三、析构函数
1.一个类中只能有一个析构函数,析构函数无参数、无返回值、不能重载。
2.若没有显式定义,系统会生成默认析构函数,其是一个空函数。对于大多数类,默认析构函数能满足要求,但若需要进行其他处理,需显式定义。
0 0
- 构造函数、析构函数、拷贝构造函数小结
- c++ 构造函数,拷贝构造函数,析构函数小结
- 【C++学习】构造函数、拷贝构造函数、析构函数小结
- 【C++】拷贝构造函数
- C++:拷贝构造函数
- c++"拷贝构造函数
- C++: 拷贝构造函数
- 【C++】拷贝构造函数
- c++::拷贝构造函数
- 【C++】:拷贝构造函数
- 【C++】拷贝构造函数
- C++:拷贝构造函数
- 学习拷贝构造函数
- 构造函数,拷贝构造函数,赋值函数,析构函数
- 构造函数,拷贝构造函数,赋值函数,析构函数
- 构造函数、析构函数、拷贝构造函数,常函数
- 构造函数、析构函数、拷贝构造函数、赋值函数
- 拷贝构造函数知识点小结
- 对泛型、反射的理解
- 黑马程序员——[OC]核心语法2
- 搜罗一些推荐的书 (一 )
- hive与hadoop、spark集成方案实践
- Python2.6-原理之类和oop(下)
- 【C++学习】构造函数、拷贝构造函数、析构函数小结
- Myeclipse使用技巧
- C# 获取exe的上一级目录
- Eigen: C++开源矩阵计算工具——Eigen的简单用法
- 目标主体名称不正确,无法生成 SSPI 上下文。
- JTA/XA: Atomikos + Spring + Hibernate 配置 注意事项
- 每日一得--Eclipse安装maven插件
- 浅谈Android五大布局(一)——LinearLayout、FrameLayout和AbsoulteLayout
- JMS简介