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. java中的IO 的示例

    字符流 package jd_1; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNot ...

  2. iOS之SQLite使用详解

    #pragma mark - 1.引入<sqlite3.h>头文件//添加libsqlite3.0.tbd#import <sqlite3.h>static sqlite3 * ...

  3. 听翁恺老师mooc笔记(13)--类型定义和联合

    typedef 虽然我们知道使用struct这个关键字定义一个结构类型,然后可以使用该结构类型定义变量.但是每次要使用的时候都需要带着struct这个关键字,那么如何摆脱这个关键字哪?C语言提供了一个 ...

  4. Django SNS 微博项目开发

    1.功能需求 一个人可以follow很多人 一个用户如果发了新weibo会自动推送所有关注他的人 可以搜索.关注其它用户 可以分类关注 用户可以发weibo, 转发.收藏.@其它人 发微博时可选择公开 ...

  5. WPF自学入门(十)WPF MVVM简单介绍

     前面文章中,我们已经知道,WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,WPF会自动发出通知去更新UI. 我们不管 ...

  6. 第二篇:Python数据类型

    一.引子 1.什么是数据? x= #是我们要存储的数据 2.为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3.数据类型 数字(整型,长整型,浮点型,复数) 字 ...

  7. PHP之this和self

    self在对象中自己调用自己使用 $this在实例化后使用$this方法 在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就 ...

  8. 第一次PTA作业

    题目6-1拆分实数整数及小数部分 1设计思路 (1) 第一步:阅读题目要求及所给部分. 第二步:根据题意补全相应函数. (2)流程图 无 2.实验代码 #include <stdio.h> ...

  9. 关于 Form 表单的 enctype 属性

    enctype 属性一共有3个值 application/x-www-form-urlencoded 在发送前编码所有字符(默认) multipart/form-data 上传二进制数据, 所以在使用 ...

  10. Linux知识积累(2)dirname的使用方法

    linux中的cd "$(dirname "$0")"/是什么意思呢? 分析如下: 1.$0 表示当前动行的命令名,一般用于shell 脚本中 2.dirnam ...