码迷,mamicode.com
首页 > 编程语言 > 详细

C/C++程序基础 (六)面向对象

时间:2018-03-27 12:37:59      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:details   父类   opera   避免   first   sdn   不一致   类重写   exp   

  1. 类的特性
    • 抽象、封装继承多态、重载
  2. class 和 struct 区别
    • C中struct仅仅可以包含数据成员,不可以有成员函数,属于复杂数据结构。
    • C++ 中struct成员访问权限默认为public;继承方式默认public;另外class可以用在模板的声明。template <class/typename T>
  3. 构造函数的初始化列表
    • 顺序和成员声明顺序一致
    • 必须应用的场景:初始化const、引用;调用父类的非默认构造函数。B(int x,int y):A(x)
  4. class A
    {
     public:
        A(int k) : j(k), i(j) // i first. j follow
        {
            // code here
        }
    
    privateint i;
       int j;      
    }

     静态数据成员和全局变量的区别:

    • 名称空间不同,避免冲突。
    • 支持信息封装,属于成员变量,可以设置为private。
    • 注意静态非常量数据成员在类外初始化,静态常量数据成员在类内初始化或类外初始化。静态常量必须在初始化列表。非静态非常量在初始化列表或构造函数。
  5. 空类的成员函数
    • 默认构造函数和复制构造函数
    • 析构函数(不可以被重载,不带参数)
    • 赋值函数(=)
    • 取值运算(&)
  6. explicit 修饰的构造函数
    • 只一个参数(其余为默认参数)的构造函数支持隐式转换。test(int i) { ... } ;  test a = 1;
    • explicit可以关闭这种隐式转换。仅可以通过test a(1);
  7. 析构、构造函数与虚函数的关系
    • 构造函数不可以写成虚函数,虚函数需要虚指针和虚表的支持,而这些是构造函数负责实现的。
    • 析构函数需要写成虚函数,可以保证子类析构函数的正常调用。 Base* a = new Derived(); delete a;
  8. 复制构造函数
    • 概念:特殊构造函数,根据同类其他对象构建以及初始化新对象。
    • 调用场景:按值传递,按值返回,使用对象进行初始化(test b; test a = b;)。
    • 默认浅复制。深复制 vs 浅复制,当对象中引用了外部内容,如果新旧指向同一内容为浅复制,否则为深复制。
    • 继承类的处理:调用基类的复制构造函数。
    • 与赋值函数的区别:1)复制是初始化对象,赋值是修改原有对象。2)复制是初始化,赋值首先检查两个对象是否一致,一致返回,不一致,释放左值对象的内存并重新构建。
  9. // 复制构造函数
    A a;
    A b = a;
    
    //赋值函数
    A a;
    A b;
    a = b;
    
    //赋值函数举例
    string& string::operator = (const string &other)
    {
      //检查是否一致
      if(this == &other)
          return *this;
      // 释放内存
      delete[] m_string;
      // 重新分配
      m_string = new char[strlen(other.m_string) + 1];
      strcpy(m_string, other.m_string);
    
      return *this;     
    }

     临时对象

    • 出现情景:参数按值传递,返回值按值传递。
  10.  C++函数重载

    • 为什么可行:C++命名规则,包含参数个数和参数类型信息。
    • 注意:返回值不同,const与否不足以区分函数。 
    • 重载和重写的区别:1)重载不同版本的函数实现,方法名相同而参数列表不同【编译时】。2)重写是子类重写父类的虚函数或抽象函数,相同的方法名和参数列表以及返回值【运行时】。
    • 注意:隐藏(重定义):子类重定义父类的同名函数(参数列表可以不同),隐藏父类同名函数。

C/C++程序基础 (六)面向对象

标签:details   父类   opera   避免   first   sdn   不一致   类重写   exp   

原文地址:https://www.cnblogs.com/niuxu18/p/note_interview_6.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!