CPP类和对象
来源:互联网 发布:嵌入式软件开发招聘 编辑:程序博客网 时间:2024/05/22 06:39
一、类和对象的基础知识
1.类的定义
在C++中用类来描述对象,使用关键词class来定义类。
class Date//类名{public://公有的private://私有的};
2.访问限定符
访问限定符有public(共有的)、private(私有的)、protect(保护的),在类定义中没有指定访问限定符,默认为private。
3.面向对象封装性
可以对一个对象进行封装处理,把它的一部分属性和功能对外界屏蔽,也就是说从外界是看不到的、甚至不可知的。
封装性指两方面含义:(1)将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间互相独立,互不干扰;
(2)将对象中某些部分隐蔽其内部细节,只留下少量借口接口,以便与外界联系,接受外界的消息。
4.对象的大小计算
每个对象的大小为类中所有成员变量的大小之和,但需要遵循内存对齐。
二、四个默认成员函数
1.构造函数
(1)构造函数的函数名与类名相同;
(2)构造函数无返回值;
(3)对象构造时系统自动调用相应的构造函数;
(4)构造函数可以重载;
(5)构造函数可以在类内/类外定义;
(6)无参的构造函数和全缺的构造函数只能有一个。
//构造函数#include <iostream>#include <stdlib.h>using namespace std;class Date{public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}void Display(){cout << _year << "-" << _month << "-" << _day << endl;}private:int _year;int _month;int _day;};int main(){Date d1(1900, 1, 1);d1.Display();system("pause");return 0;}
2.拷贝构造函数
(1)创建对象时使用同类进行初始化,是特殊的构造函数;
(2)拷贝构造函数其实是一个构造函数的重载;
(3)拷贝构造函数的参数必须使用引用传参,使用传值方式会引发无穷递归调用;
(4)若为显示定义,系统会默认缺省的拷贝构造函数。缺省的拷贝构造函数会依次拷贝类成员进行初始化。
//拷贝构造函数#include <iostream>#include <stdlib.h>using namespace std;class Date{public: Date(int year, int month, int day) { _year = year; _month = month; _day = day; }Date(const Date& d) { _year =d._year; _month =d._month; _day = d._day; } void Display() { cout << _year << "-" << _month << "-" << _day << endl; }private: int _year; int _month; int _day;};int main(){ Date d1(1900, 1, 1); Date d2 = d1; d1.Display(); d2.Display(); system("pause"); return 0;}
3.析构函数
(1)析构函数无参数,无返回值;
(2)析构函数不能重载;
(3)析构函数完成的清理工作,并不是释放空间;
(4)系统会自动生成析构函数;
(5)析构函数在类名加上字符~。
//析构函数class Date{public:~Date(int year, int month, int day){_year = year; _month = month;_day = day;}private:int _year;int _month;int _day;};
4.运算符重载
(1)增强程序的可读性;
(2)运算符重载后不能改变运算符的优先级和结合性;
(3)有5个不支持运算符重载:sizeof/::/?:/./.*
(4)拷贝构造函数是创建的对象,使用一个已有对象来初始化准备创建的对象,赋值运算符的重载是对一个已存在的对象进行拷贝赋值。
//赋值运算符重载#include <iostream>#include <stdlib.h>using namespace std;class Date{public:Date(){}Date& operator=(const Date& d){if (_year != d._year){this->_year = d._year;this->_month = d._month;this->_day = d._day;}return *this;}private:int _year;int _month;int _day;};int main(){Date d1;Date d2;d2 = d1;system("pause");return 0;}
三、隐含的this指针
1. 每个成员函数都有一个指针形参,名字是固定的,称为this指针,this指针是隐式的;(构造函数比较特殊,没有隐含this形参)
2. 编译器会对成员函数进行处理,在对象调用成员函数时,对象地址作实参传递给成员函数的第一个形参this指针;
3. this指针是成员函数隐含指针形参,是编译器自己处理的,我们不能在成员函数的形参中添加this指针的参数定义,也不能在调用时显示传递对象的地址给this指针。
//隐含的this指针void Display(){cout << _year << endl;}void Display(Date* this){cout << this->_year << endl;}
- CPP类和对象
- CPP -- W2 类和对象初探
- CPP -- W3 类和对象进阶
- CPP基础知识(二)--类和对象
- Cpp -类的对象和类的指针的区别
- CPP类和对象—Complex的编写
- CPP类和对象--四个默认函数+运算符重载
- CPP类和对象1-四个默认成员函数
- cpp的函数对象和谓词
- Cpp类和对象之四个默认成员函数和运算符重载
- CPP类和对象—四个默认成员函数+运算符重载
- CPP类和对象+四个默认成员函数+运算符重载
- 面向对象编程之.h和.cpp文件分开编写
- 【一天一篇CPP】对象与指针与数组 对象和const和指针和引用
- 继承CHtmlView类的h 和cpp
- 【一天一篇CPP】友元和类
- cpp中类和struct的区别
- NDK-CPP语言-构造函数+New和Delete和Static关键字+对象大小
- [欧拉图总结]
- 随机森林算法构建岩石水雷分类器
- radio 单选 点2下取消选中!
- 【图像处理】MATLAB:图像噪声
- RoCE与RDMA技术
- CPP类和对象
- 基于服务器端的身份证识别OCR技术介绍
- java提高篇(41)--urlconnection下载文件或图片并保存到本地
- 如何将自己的项目导入到github里面
- bzoj 1028 麻将 模拟 解题报告
- Mybatis + SpringMVC事务管理
- windows service (三)打包安装服务
- 为什么SHL和SAL相同
- neo4j load csv 的使用问题总结