类与对象

📅 2026/7/28 14:56:20
类与对象
构造函数1.无参的构造函数与全缺省参数的构造函数都称为系统默认的构造函数2.系统默认的构造函数只能有一个3.一旦你写了显示的构造函数系统就不会提供默认的构造函数4.构造函数可以重载析构函数1.功能上与构造函数相反对象在销毁的时候会调用析构函数2.一个类有且只有一个析构函数若没有写则系统会自动生成默认的析构函数3.对象生命周期结束的时候C编译系统会自动调用析构函数4.与构造函数一样如果写了自己的析构函数的话就不会调用系统的默认析构5.系统会调用自定义类型本身的析构函数拷贝构造函数1.拷贝构造函数是构造函数的一个重载2.拷贝构造函数的参数里面有且必须只有一个引用传值的话会引发无穷递归3.系统同样也会提供一个默认的拷贝构造函数这个默认的函数的拷贝方式又被称为浅拷贝就是按照字节序的进行拷贝但是如果对象时指针的话就会出程序崩溃深拷贝恰恰可以解决这个问题#include iostream using namespace std; class Date { public: Date(int year 1900, int month 1, int day 1) { _year year; _month month; _day day; } /*Date(const Date d)如果没有定义拷贝构造函数系统就会调用默认的拷贝构造函数按内存存储、字节序进行拷贝也叫浅拷贝 { _year d._year; _month d._month; _day d._day; }*/ private: int _year; int _month; int _day; }; void TestDate() { Date d1;//调用无参构造函数 Date d2(2015, 1, 1);//调用带参数的构造函数 //注意如果通过无参构造函数创建对象时对象后面不用跟括号否则就成了函数声明 //一下代码的函数声明了d3函数该函数无参返回一个日期类型的对象 Date d3(); } int main2() { Date d1; Date d2(d1); return 0; }赋值运算符重载1.运算符的重载operator2.作为类成员的函数重载时其形参的数量比操作数目要少一个因为有默认形参this指针。3. .*、::、sizeof、?:、. 以上五个运算符没有重载4.运算符重载成全局的就需要共有成员。1.如果没有写的话编译器也会自己生成一个默认的赋值运算符重载。2.返回值为this指针#include iostream using namespace std; class Date { public: Date(int year 1900, int month 1, int day 1) { _year year; _month month; _day day; } Date(const Date d) { _year d._year; _month d._month; _day d._day; } Date operator(const Dated) { if (this ! d) { _year d._year; _month d._month; _day d._day; } } private: int _year; int _month; int _day; }; //bool operator(const Date d1, const Date d2) //{ // return d1._year d2._year // d1._month d2._month // d1._day d2._day; //} int main4() { Date d; return 0; }const修饰类的成员函数1.const修饰类的成员函数时实际修饰的是this指针表明该成员函数不能对类的任何成员进行修改2. const对象可以调用非const成员函数吗不可以非const对象可以调用const成员函数吗可以const成员函数内可以调用其它的非const成员函数吗不可以非const成员可以调用其他const成员函数吗可以#include iostream using namespace std; class Date { public: void Display() { cout Display() endl; cout year: _year endl; cout month: _month endl; cout day: _day endl; } void Display() const { cout Display() endl; cout year: _year endl; cout month: _month endl; cout day: _day endl; } private: int _year; int _month; int _day; }; int main5() { Date d1; d1.Display(); const Date d2; d2.Display(); return 0; }const取地址操作符重载类会自动提供两个取地址运算符重载一个是针对普通对象的,一个是针对const对象(6)。#include iostream using namespace std; class Date { public: Date* operator() { return this; } const Date* operator()const { return this; } private: int _year; int _month; int _day; }; int main() { return 0; }