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. 关于ORM,以及Python中SQLAlchemy的scoped_session

    orm(object relational mapping):对象关系映射. python面向对象,而数据库是关系型. orm是将数据库关系映射为Python中的对象,不用直接写SQL. 缺点是性能略 ...

  2. 【WCF系列】(二)设计和实现服务协定

    设计和实现服务协定 WCF术语介绍 服务(Service):服务是一个构造,它公开一个或多个终结点,其中每个终结点都公开一个或多个服务操作. 终结点(EndPoint):终结点是用来发送或接收消息(或 ...

  3. C#/AutoCAD 2018/ObjectArx/二次开发再说实体(六)

    这些函数对大家很有用,如果想获取详细源代码请加云幽学院yunyou.ke.qq.com报名免费课程,如果想学习更系统.更全面的知识请报名收费课程,有大量开发案例共享. 1.获取模型空间中所有实体 #r ...

  4. C++ STL常用容器基本用法汇总

    1.vector 包含头文件#include<vector> 使用命名域using namespace std 定义元素类型为T的vector vector<T> vec 增: ...

  5. 201621123062《java程序设计》第二周学习总结

    1.本周学习总结 本周学习重点: 1.java的基本数据类型(类似于C,特有boolean),java的引用类型(类似指针),其他常用类. 2.字符串类型String(比c简单),String的不变性 ...

  6. C语言:第0次作业

    问题1: 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 感性地讲,高中时意外看到了电影<社交网络>,自那时起就将将马克扎克伯格视为偶像,他天才的智慧和长远的眼光深深吸引了我 ...

  7. PHP获取短信验证码

    PHP如何获取短信验证码?以下是创蓝253短信平台下的PHP接口代码案例:   <?php header("Content-type:text/html; charset=UTF-8& ...

  8. MariaDB/MySQL存储过程和函数

    本文目录:1.创建存储过程.函数 1.1 存储过程的IN.OUT和INOUT2.修改和删除存储过程.函数3.查看存储过程.函数信息 在MySQL/MariaDB中,存储过程(stored proced ...

  9. RadioButton的图标改变大小(TextView也适用)

    RadioButton的图标大小并没有相应的布局参数,本文通过自定义属性的方式自定义RadioButton,实现控制图片大小. 本文要点: 自定义属性的使用. 解决RadioButton文字上.下.左 ...

  10. linux系统命令学习系列-用户切换命令su,sudo

    先复习一下上节内容: 用户组添加groupadd 用户组修改groupmod 用户组删除groupdel 作业创建一个id为501的组group1,然后改成group2, 同时id变为502,最后删除 ...