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. CountDownLatch 使用说明

    CountDownLatch是一种java.util.concurrent包下一个同步工具类,它允许一个或多个线程等待直到在其他线程中一组操作执行完成. CountDownLatch的用法非常简单,下 ...

  2. Beta No.6

    今天遇到的困难: github服务器响应很慢 推图的API接口相应较慢,超过了初始设定的最大延迟时间,导致了无法正确返回图片 ListView滑动删除Demo出现了某些Bug,这些Bug可能导致了某些 ...

  3. 高校征信系统项目Postmortem结果

    设想和目标 1 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件需要解决的问题是当前高校学生征信系统建设薄弱的问题,我们试图建立一个征信系统,在完成之后推 ...

  4. Flask 学习 十一 关注者

    数据库关系 1.1多对多关系 添加第三张表(关联表),多对多关系可以分解成原表和关联表之间的两个一对多的关系 多对多仍然使用db.relationship()方法定义,但是secondary参数必须设 ...

  5. [知识梳理]课本3&9.1

    函数:关键词:参数.返回值.函数返回类型.函数体. 函数按照返回类型,可以分为有参函数和无参函数. 函数根据是否有返回值,可以分为返回值函数和非返回值函数.     函数的定义:函数的定义可以放在任意 ...

  6. ThinkPad安装deepin操作系统报错解决方法

    目前deepin操作系统,软件也比较多,所以想在自己的thinkpad t430笔记本上安装.但是安装时报错,具体错误忘了看了.反复试了好几次都不行,最后在网上查了,讲bios设置调整之后可以正常安装 ...

  7. awk sed tr替换换行符为逗号,并合并为一行

    在群里看到的.记录以备用.  sed 帮助命令:http://man.linuxde.net/sed 文件里有如下行,我想将每行的回车符替换为逗号,并将所有行合并到一行,用awk或sed怎么写啊TOP ...

  8. STM32读取温湿度传感器DHT11和DHT21(AM2301)系列问题

    1.DHT11和DHT21传感器 这两种传感器都是奥松公司的产品,具体的传感器说明书在其官网上有(www.aosong.com). DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合 ...

  9. 记录Yii2代码调试中出现的两个问题(截图展示)

    1.代码会中断执行,不提示错误信息,是由于substr函数第一个参数为数组造成的 2. 谷歌浏览器调试异步调用接口时出现的错误,需在接口返回处进行断点调试 这两个错误比较隐蔽,调试代码时必须认真仔细

  10. 创建帧动画1 - xml方式

    废话不多说,先看东西   创建帧动画1 - xml方式 帧动画的创建方式主要以下2种: * 用xml创建动画: * 用代码创建动画:   本文内容主要关注 xml文件 创建帧动画的方式   xml文件 ...