C++默认成员函数
来源:互联网 发布:链接买卖淘宝 编辑:程序博客网 时间:2024/05/20 21:20
类和对象
隐含的this指针
1. 每个成员函数都有一个指针形参,即this指针。(构造函数没有隐含的this指针形参)。
2. 编译器会对成员函数进行处理。对象调用时,对象地址作实参传递给成员函数的第一个形参 this 指针。
3. this 指针是成员函数 隐含的指针形参编译器处理的,我们不能随意添加,也不能在调用时显示的传递对象的地址 给this指针。
构造函数
对私有的成员变量进行初始化。构造函数仅在定义对象的时候自动执行一次。
构造函数是特殊的成员函数;
特点:
函数名与类名同名;
无返回值;
对象构造时,即对象实例化,系统自动调用构造函数;
构造函数可以重载;
可以在类内外定义;
如果类中没有给出构造函数,编译器会自动给出一个缺省的构造函数;
无参构造函数 全缺省值的构造函数 都是全省构造函数,只能有一个。
拷贝构造函数
创建对象时使用同类对象来进行初始化,即 同类对象的引用;
特点:
构造函数的重载;
必须使用引用传参,传值会引起无穷递归调用 。(如果不是传引用,则就相当于传值方式,而传值则会调用该类的拷贝构造函数,从而无穷递归的调用拷贝构造函数。* 传指针也是传值的方式。)
如果没有显示定义,系统会默认缺省的拷贝构造函数,缺省的会一次拷贝类成员来初始化。
ps:创建对象的同时初始化 是拷贝构造函数。
为什么可以直接访问私有的成员变量?
1.在类的成员函数中可以直接访问同类对象的私有、保护成员;
2.C++的访问限定符是以类为单位的,即 在这个单位内的成员是可以互相访问的。
析构函数
一个对象的生命周期结束,系统会自动调用析构函数。
析构函数是特殊的成员函数。
特点:
类名前 加~
无返回值
一个类只有一个析构函数,如果没有,系统会自动生成缺省的析构函数。
析构函数不是删除对象 而是做些清理工作。
运算符重载
增强程序的可读性,C++支持运算符的重载。
特点:
operator+ 合法的运算符构成函数名(重载< operator<)
重载以后,不能改变运算符的优先级、结合性、操作数个数。
5个不能重载的运算符:
. 类成员访问运算符
.* 类成员指针访问运算符
:: 作用域
sizeof 长度运算符
?: 三目运算符 条件运算符。
赋值运算符的重载
赋值运算符是对一个已存在的对象进行拷贝赋值。
拷贝构造函数是创建对象的同时用已有的对象初始化它。
#include<iostream>using namespace std;class Date{public: Date()//默认构造函数 {} Date(int year, int month, int day) //构造函数 :_year(year) ,_month(month) ,_day(day) { cout << "构造" << endl; } ~Date() {} Date(const Date& d) //拷贝构造 { _year = d._year; _month = d._month; _day = d._day; cout << "copy"<<endl; } Date& operator=(const Date& d) //赋值运算符的重载 { if (this != &d) { _year = d._year; _month = d._month; _day = d._day; } cout << "==" << endl; return *this; } void print() { cout << _year << " " << _month << " " << _day << endl; }private: int _year; int _month; int _day;};int main(){ Date d1(2015,6,4); Date d2 = d1; Date d3; d3 = d1; d1.print(); d2.print(); d3.print(); getchar(); return 0;}
哪些成员变量必须放在初始化列表里面?
1.常量成员变量(常量 创建时必须初始化)
2.引用类成员变量(引用创建时必须初始化)
3.没有缺省构造函数的类成员变量。
成员变量按声明顺序依次初始化,而不是初始化列表出现的顺序。
- 默认内联成员函数
- 成员函数默认参数
- C++默认成员函数
- 小结 | C++(二)| 默认成员函数、this指针
- C/C++笔试系列--如何利用成员变量作为成员函数的默认参数
- 类默认的成员函数
- C++默认成员函数使用说明
- c++成员函数默认参数
- 类的默认成员函数
- 类的默认成员函数
- 类的默认成员函数
- 类的默认成员函数
- 【c++】类和对象--四个默认成员函数+运算符重载
- 【C++】类和对象--基础知识+四个默认成员函数+运算符重载
- c++const成员函数
- C++_const成员函数
- [C++] 静态成员函数
- C++:特殊成员函数
- 欢迎使用CSDN-markdown编辑器
- Java垃圾回收机制(GC)详解
- android屏幕适配
- 使用 Postman 开发 Blockchain Network之 Chaincode (智能合约)
- Jquery中的parent()与parents()取父元素的区别
- C++默认成员函数
- 10个相关的单选题
- lvarchar类型对表结构变更影响-1
- react基础知识
- 第四周项目二计算并联电路的总电阻
- JAVA从菜鸟【入门】到新手【实习】一一 学习过程的经验和策略【面向对象核心】
- altium designer 绘制pcb时漏线检查
- JNI调用Java中的静态非静态方法
- 03 Linux shell 变量 数学 运算