1. CPP的类与对象:

当我们定义一个基本类型变量时,方法如下:

int p;        #定义一个int类型变量
bool b; #定义一个bool类型变量
float c ; #定义一个float类型变量

显然定义变量p适用于存储整数类型的,变量b是用于存储布尔类型的,变量c是用于存储浮点数类型的。但是变量声明的意义不只是这个,另一个同样重要的意义就是限定对变量的操作。例如:对p可以进行算术运算,比较运算等,对b可以进行逻辑运算等。这就说明每一种数据类型都包括了数据本身的属性以及对数据的操作。

  但实际上C++定义的基本类型并不能满足现实世界中各种对象的需要,于是C++提供了对自定义类型的支持,这就是类。类实际上就是用户自定义的一种数据类型,通过对现实世界的对象进行数据抽象和功能抽象,得到类的数据成员和函数成员。当定义了一个类之后,便可以定义该类型的变量,这个变量就称为累的对象(或实例),这个定义的过程也称为类的实例化。

类的函数:

构造函数:是类的一种特殊的成员函数,它会在每次类被创建时被调用。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。在程序运行中,当遇到对象声明语句时,程序会向操作系统申请一定的内存空间用于存放新建的对象。构造函数的作用就是在对象被创建的过程中利用特定的值初始化这个对象。

默认构造函数:未提供显式初始值时,用来初始化对象的构造函数。

拷贝构造函数/复制构造函数:拷贝构造函数是一类特殊的构造函数,是使用同一类中之前创建的对象来初始化新创建的对象。

通常用于:

    1. 当用类的一个对象去初始化该类的另一个对象时;
    2. 如果函数的形参是类的对象,调用函数时,进行形参和实参的结合是。
    3. 如果函数的返回时类的对象,函数执行完成返回调用者时。

析构函数:它用来完成对象被删除前的一些清理工作。析构函数实在对象的生存期即将结束的时刻被自动调用的。

示例代码:

#include<iostream>
using namespace std; //Point类的定义
class Point {
public:
   Point(){
   cout <<"调用默认构造函数"<<endl;
   } //默认构造函数
Point(float xx,float yy) {
x = xx;
y = yy;
} //构造函数
Point(Point &p){
   x = p.x;
y = p.y;
cout << "调用拷贝构造函数"<<endl;
} //拷贝构造函数
int getX() { return x; }
int getY() { return y; }
private: //私有数据成员
float x, y;
};

第一种情况示例:

int main() {
Point a(, );
Point b(a); //用对象a初始化实例b,复制构造函数被调用
Point c = a; //用对象a初始化实例c,复制构造函数被调用
cout << b.getX() << endl;
cout << c.getX() << endl;
return ;
}

运行结果:

第二种情况示例:

void f(Point p) {
cout << p.getX() << endl;
}
int main() {
Point a(, );
f(a); //函数的形参为类的对象,当函数调用时,可以理解为用对象a初始化函数形参p,构造函数被调用。
return ;
}

运行结果:

第三种情况示例:

//定义一个返回值类型为Point类型的函数
Point g() {
Point a(, );
return a;
}
int main() {
Point b;
b = g();
cout << b.getX() << endl;
return ;
}

运行结果:

c++类与对象(1)——构造,复制构造函数的更多相关文章

  1. 【C++】类和对象(构造与析构)

    类 类是一种抽象和封装机制,描述一组具有相同属性和行为的对象,是代码复用的基本单位. 类成员的访问权限 面向对象关键特性之一就是隐藏数据,采用机制就是设置类成员的访问控制权限.类成员有3种访问权限: ...

  2. C++(二十六) — 构造函数、析构函数、对象数组、复制构造函数

    1.构造函数 (1)每个类都要定义它自己的构造函数和析构函数,是类的成员函数. 特点:名称与类名相同:没有返回值:一定是共有函数,可以直接访问类内所有成员函数:可以带默认形参,可以重载: class ...

  3. C++学习5-面向对象编程基础(构造函数、转换构造、静态数据成员、静态成员函数、友元)

    知识点学习 类 const作用 C语言的const限定符的含义为"一个不能改变值的变量",C++的const限定符的含义为"一个有类型描述的常量": const ...

  4. C++ 类 复制构造函数 The Copy Constructor

    一.复制构造函数的定义 复制构造函数是一种特殊的构造函数,具有一般构造函数的所有特性.复制构造函数创建一个新的对象,作为另一个对象的拷贝.复制构造函数只含有一个形参,而且其形参为本类对象的引用.复制构 ...

  5. 剑指offer:赋值运算符函数和复制构造函数

    赋值运算符函数 对于定义一个赋值运算符函数时,需要注意一下几点: (1)函数的返回类型必须是一个引用,因为只有返回引用,才可以连续赋值 (2)传入的参数声明为常量引用,可以提高代码效率,同时赋值运算函 ...

  6. 编译器角度看C++复制构造函数

    [C++对象模型]复制构造函数的建构操作 关于复制构造函数的简单介绍,可以看我以前写过的一篇文章C++复制控制之复制构造函数该文章中介绍了复制构造函数的定义.调用时机.也对编译器合成的复制构造函数行为 ...

  7. C++中复制构造函数与重载赋值操作符总结

    前言 这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 1.复制构造函数和重载赋值操作符的定义: 2.复制构造函数和重载赋值操作符的调用时机: 3.复制构造函数和重载赋值操作符 ...

  8. C++中复制构造函数与重载赋值操作符

    我们都知道,在C++中建立一个类,这个类中肯定会包括构造函数.析构函数.复制构造函数和重载赋值操作:即使在你没有明确定义的情况下,编译器也会给你生成这样的四个函数.例如以下类:   class CTe ...

  9. c++ 复制构造函数和赋值函数

    c++ 自动提供了下面这些成员函数 1默认构造函数 2.复制构造函数 3.赋值操作符 4.默认析构函数 5.地址操作符 赋值构造函数copy construtor 用于将一个对象复制到新创建的对象中, ...

  10. C/C++基础知识总结——类与对象

    1. 面向对象程序设计的特点 1.1 抽象 1.2 封装 1.3 继承 1.4 多态 (1) 分为:强制多态.重载多态.类型参数化多态.包含多态 (2) 强制多态:类型转换 重载多态: 类型参数化多态 ...

随机推荐

  1. 文献管理工具的使用(Mendeley和Endnote)

    以前是Mendeley的忠诚用户,但是最近在linux平台下出现的bug使我非常崩溃,之前辛辛苦苦整理的文献和分组,分分钟灰飞烟灭.所以希望能转用一个至少比较稳定的文献管理软件.刚好手头上有Mac版的 ...

  2. [转]C++ 初始化列表的初始化顺序

    构造函数初始化列表仅用于初始化成员的值,并不指定这些初始化执行的次序.成员被初始化的次序就是定义成员的次序.第一个被定义的成员先被初始化,依次类推.一般,初始化的顺序无关紧要,然而,如果一个成员是根据 ...

  3. python全栈学习--day1

      计算机基础 CPU:中央处理器 内存:4GB,8GB,临时处理事务的地方,供给CPU数据. 硬盘:相当于电脑的数据库,存储着大量的数据,文件,电影等. 操作系统:执行者,支配所有关系 window ...

  4. 1013团队Beta冲刺day4

    项目进展 李明皇 今天解决的进度 因服务器端未完成登录态维护,故无法进行前后端联动. 明天安排 前后端联动调试 林翔 今天解决的进度 因上课和实验室事务未完成登录态维护 明天安排 完成登录态维护 孙敏 ...

  5. 从PRISM开始学WPF(六)MVVM(三)事件聚合器EventAggregator?

    从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...

  6. MySQL搭建主从数据库 实现读写分离

    首先声明,实际生产中,网站为了提高用户体验,性能等,将数据库实现读写分离是有必要的,我们让主数据库去写入数据,然后当用户查询的时候,然后在从数据库读取数据,故能减轻数据库的压力,实现良好的用户体验! ...

  7. MongoDB启动客户端和服务端

    要在MongoDB安装(我安装在D盘)的目录的根目录下,先建data目录,然后data目录下再建db目录(结果:D:\data\db). 然后cmd进入bin目录,执行.\mongod.exe启动服务 ...

  8. python实现维吉尼亚解密

    # -*-coding:UTF-8-*- from sys import stdout miwen = "KCCPKBGUFDPHQTYAVINRRTMVGRKDNBVFDETDGILTXR ...

  9. C#之Socket通信

    0.虽然之前在项目中也有用过Socket,但始终不是自己搭建的,所以对Server,Clinet端以及心跳,断线重连总没有很深入的理解,现在自己搭建了一遍加深一下理解. 服务端使用WPF界面,客户端使 ...

  10. angular路由守卫

     路由守卫是指当用户满足了某些要求之后才可以离开或者进入某个页面或者场景的时候使用.比如说只有当用户填写了用户名和密码之后才可以进入首页,比如说用户离开某个页面时明月保存信息提示用户是否保存信息后再离 ...