面向对象简介及c++类的四个默认成员函数

1、什么是面向对象?

面向对象程序设计
概念:(Object Oriented Programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法。 对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
C++不是纯面向对象语言,而是基于面向对象的语言 (ps:因为它包含C的部分,C是面向过程)
面向对象的三大特性: 封装、继承、多态

2、类的大小?为什么要内存对齐?内存对齐的计算?空类的计算

1) 每个对象的大小为类中所有成员变量的大小之和,当然这里也遵循内存对齐原则。
内存对齐原则请查看:http://blog.csdn.net/adzn1/article/details/78619851
2)内存对齐是为了提高程序运行速度(浪费空间换时间)

这里写图片描述

3)空类的大小为1

3、隐含的this指针
这里写图片描述

4、四个默认成员函数详解
1、构造函数

成员变量为私有的,要对它们进行初始化,必须用一个公有成员函数来进行。同时这个函数应该有且仅在顶yi时自动执行一次。
特点:
1)函数名与类名相同;
2)无返回值
3)对象构造时系统自动调用对应的构造函数
4)可以重载
5)可在类内定义,也可在类外定义
6)若在类中没有定义构造函数,则c++编译器自动产生一个缺省的构造函数,定义了系统就不会自动产生。
7)无参的构造函数和全缺省值的构造函数都认为是缺省构造函数,并且缺省的构造函数只能有一个。

无参构造函数&带参的构造函数
class Date
 {
  public :    
   // 1.无参构造函数 
       Date () 
      {}
   // 2.带参构造函数     
   Date (int year, int month , int day )                    {          
   _year = year ;          
   _month = month ;          
   _day = day ;    
   } 
   private :
   int _year ;     
   int _month ;     
   int _day ; 
   };
void TestDate1 () 
{
        Date d1 ;          // 调用无参构造函数        Date d2(2015, 1, 1);   // 调用带参的构造函数
}
带缺省参数的构造函数
class Date 
{
 public :     
 // 3.缺省参数的构造函数     
 Date (int year = 2000, int month = 1, int day = 1)    
 {          
 _year = year ;          
 _month = month ;          
 _day = day ;    
 }

2、拷贝构造函数
创建对象时使用同类来进行初始化,这时所用的构造函数称为拷贝构造函数,拷贝构造函数是特殊的构造函数。
特征:
1)拷贝构造函数其实是一个构造函数的重载。
2)拷贝构造函数的参数必须使用引用传参,使用传值方式会引发无穷递归引用。
3)若未写,系统会默认缺省的拷贝构造函数,依次拷贝类成员进行初始化。

class Date 
{ 
    public :
     Date()
         {}
     // 拷贝构造函数  
     Date (const Date& d)
            {          
            _year = d ._year;          
            _month = d ._month;         
             _day = d ._day;    
             } 
     private :     
     int _year ;     
     int _month ;     
     int _day ; 
   };

     void TestDate1 () 
     {     
     Date d1 ;// 下面两种用法都是调用拷贝构造函数,是等价的。
     Date d2 (d1);    // 调用拷贝构造函数     
     Date d3 = d1;    // 调用拷贝构造函数 
     }

3、析构函数:
当一个对象的生命周期结束时,C++编译系统会自动调用一个成员函数,这个特殊的成员函数即析构函数
特征:
1、析构函数在类名加上字符~;
2、析构函数无参数无返回值。
3、一个类有且只有一个析构函数,若未显示,系统会自动生成缺省的析构函数
4、对象生命周期结束时,c++编译系统自动调用析构函数
5、注意析构函数体内并不是删除对象,而是做一些清理工作
先构造后析构,后析构先构造

class Date 
{
 public :     // 析构函数    
 ~Date()    
 {} 
 private :     
 int _year ;    
 int _month ;     
 int _day ; 
 };
EXP0
class Array 
{
 public :    
 Array (int size)    
 {          
 _ptr = (int *)malloc( size*sizeof (int));    
 }
     // 这里的析构函数需要完成清(shi)理(fang)工(kong)作(jian)。    
     ~ Array ()    
    {          
     if (_ptr )         
     {              
     free(_ptr );              
     _ptr = 0;         
     }    
    } 
   private :     
   int* _ptr ; 
};

4、运算符重载:
为了增强程序的可读性,C++支持运算符重载。
运算符重载特征:
1. operator+ 合法的运算符 构成函数名(重载<运算符的函数名:operator< )。
2. 重载运算符以后,不能改变运算符的优先级/结合性/操作数个数。
笔试题考点 5个C++不能重载的运算符:
.*/::/sizeof/?:/.
【赋值运算符重载】
拷贝构造函数是创建的对象,使用一个已有对象来初始化这个准备创建的对象。 赋值运算符的重载是对一个已存在的对象进行拷贝赋值。

class Date 
{
 public :     
 Date()   
  {}
     // 拷贝构造函数    
      Date (const Date& d)         
       _year(d._year)         
       _month(d._month)         
        _day(d._day)    
{}
     // 赋值操作符的重载     
     // 1.思考为什么operator=赋值函数需要一个 Date&的返回值,使用void做返回值可以吗?请验证    
      Date& operator = (const Date& d)   
       {           
        // 2.这里的if条件判断是在检查什么?          
        if (this != &d)        
         {              
         this->_year = d. _year;              
         this->_month = d. _month;              
         this->_day = d. _day;         
         }
          return *this ;    
          } private:     
          int _year ;     
          int _month ;     
          int _day ; 
       };
void Test () 
{     
     Date d1 ;     
     Date d2 = d1; // 调用拷贝构造函数
     Date d3 ;     
     d3 = d1 ;    // 调用赋值运算符的重载
}

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值