小工具知识网

当前位置: 首页 > 行业知识 > C++必修:类与对象(二)

行业知识

C++必修:类与对象(二)

2026-11-04 06:12:09 来源:互联网转载

✨✨ 欢迎大家来到贝蒂大讲堂✨✨

养成好习惯,先赞后看哦~

所属专栏:C++学习

贝蒂的主页:Betty’s blog

1. 构造函数

1.1. 定义

构造函数是一个特殊的成员函数,名字与类名相同, 创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。其特点如下:

  1. 函数名与类名相同。
  2. 无返回值。
  3. 对象实例化时编译器自动调用对应的构造函数。
  4. 构造函数可以重载。

下面是一个日期类的构造函数

class Date{public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){cout Date d1(1,1,1);//自动调用d1.Print();return 0;}public:/*Date(int year, int month, int day){_year = year;_month = month;_day = day;}*/    //编译器会自动生成一个无参的默认构造函数void Print(){cout public:Date()//无参{_year = 1900;_month = 1;_day = 1;}Date(int year = 1900, int month = 1, int day = 1)//全缺省{_year = year;_month = month;_day = day;}void Print(){cout Date d;//引起歧义return 0;}public:Betty(){cout public:void Print(){cout Date d;d.Print();return 0;}public:void Print(){cout Date d;d.Print();return 0;}public:Date(int year, int month, int day): _year(year), _month(month), _day(day){ //...}void Print(){cout Date d(2024,1,3);d.Print();return 0;}public:A(int a):_a(a){}private:int _a;};class B{public:B(int a, int ref):_b(a), _ref(ref), _n(3){}private:A _b; // 没有默认构造函数int& _ref; // 引用const int _n; // const常量};public:A(int a = 1)//默认构造:_a(a){cout public:B(int a):_m(a){}private:int _m;A _b; };int main(){B b(2);return 0;}public:A(int a):_a1(a), _a2(_a1){}void Print() {cout A aa(1);aa.Print();}//输出??public://构造函数Date(int year = 1, int month = 1, int day = 1){_year = year;_month = month;_day = day;}void Print(){cout _year = _month = _day = 0;}private:int _year;int _month;int _day;};public://构造函数Date(int year = 1, int month = 1, int day = 1){_year = year;_month = month;_day = day;}void Print(){cout public:~Betty(){cout public://构造函数Date(int year = 1, int month = 1, int day = 1){_year = year;_month = month;_day = day;}void Print(){cout public:Stack(size_t capacity = 2){_array = (DataType*)malloc(sizeof(DataType) * capacity);if (nullptr == _array){perror("malloc申请空间失败!!!");return;}_capacity = capacity;_size = 0;}void Push(DataType data){// CheckCapacity();_array[_size] = data;_size++;}~Stack(){if (_array!=nullptr){free(_array);_array = nullptr;_capacity = 0;_size = 0;}}private:DataType* _array;int _capacity;int _size;};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;};int main(){Date d1(2024,2,2);Date d2(d1);//拷贝构造Date d3 = d1;//拷贝构造    d1.Print();d2.Print();d3.Print();return 0;}_year = d._year;_month = d._month;_day = d._day;}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;//}void Print(){cout Date d1(2024, 2, 2);Date d2(d1);//拷贝构造Date d3 = d1;//拷贝构造d1.Print();d2.Print();d3.Print();return 0;}public:Stack(size_t capacity = 10){_array = (DataType*)malloc(capacity * sizeof(DataType));if (nullptr == _array){perror("malloc申请空间失败");return;}_size = 0;_capacity = capacity;}void Push(const DataType& data){// CheckCapacity();_array[_size] = data;_size++;}~Stack(){if (_array){free(_array);_array = nullptr;_capacity = 0;_size = 0;}}private:DataType* _array;size_t _size;size_t _capacity;};int main(){Stack s1;s1.Push(1);s1.Push(2);s1.Push(3);s1.Push(4);Stack s2(s1);//默认拷贝构造return 0;}public:Date(int year, int month, int day): _year(year), _month(month), _day(day){ //...}void Print(){cout return d1._year == d2._year&& d1._month == d2._month&& d1._day == d2._day;}int main(){Date d1(2024,1,1);Date d2(2024, 1, 1);if (d1 == d2)//也可以显示调用operator==(d1,d2);{cout cout return _year == d._year&& _month == d._month&& _day == d._day;}public:Date(int year = 1900, int month = 1, int day = 1){_year = year;_month = month;_day = day;}Date& operator=(const Date& d)//赋值运算符重载{if (this != &d){_year = d._year;_month = d._month;_day = d._day;}return *this;}private:int _year;int _month;int _day;};public:Time(){_hour = 1;_minute = 1;_second = 1;}Time& operator=(const Time& t){cout _hour = t._hour;_minute = t._minute;_second = t._second;}return *this;}private:int _hour;int _minute;int _second;};class Date{private:// 基本类型(内置类型)int _year = 2024;int _month = 1;int _day = 1;// 自定义类型Time _t;};int main(){Date d1;Date d2;d1 = d2;return 0;}public:Date(int year = 1900, int month = 1, int day = 1){_year = year;_month = month;_day = day;}int _year;int _month;int _day;};Date& operator=(Date& left, const Date& right)//error{if (&left != &right){left._year = right._year;left._month = right._month;left._day = right._day;}return left;}public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){cout const Date d2(2022, 1, 13);d2.Print();//errorreturn 0;}cout public:Date* operator&(){return this;}const Date* operator&()const{return this;}private:int _year; // 年int _month; // 月int _day; // 日};

上一篇:揭秘JavaScript实现图片倾斜效果的技巧与方法!

下一篇:怎么建微信网页?