zoukankan      html  css  js  c++  java
  • 2.C++面向对象补充1

    C++语言:

    • 类包含:数据成员+成员函数+访问控制
    • 访问控制:public,protect,private

    1.自身类的对象不可以作为自身类的成员存在,但可以是自身类的指针:

     1 例:
     2 错误用例:
     3 class Date 
     4 {
     5    Date dates;
     6 };
     7 正确用例: 
     8 class Date
     9 {
    10    Date* dates;
    11 };

    2.类内定义函数默认为内联函数inline,类外定义函数必须显示使用inline才为内联函数。

    3.类内构造函数列表:

    1 Date::Date(int y,int m,int d):year(y),month(m),day(d)
    2 {
    3     xxx
    4 }

    4.构造函数与析构函数:

    4.1.构造函数可以重载,而析构函数只有一个无参无返回类型函数
    4.2.程序若不主动使用析构函数,等到程序中止时自动调用析构函数,并且析构函数调用次序与构造函数相反

    5.复制构造函数:(默认的复制构造函数为浅复制,自定义要用深复制,防止引用或指针指向同一个地址)

    5.1.格式:

    1 类名::类名(const 类名& 引用名)
    2 {
    3     xxx
    4 }

    5.2.复制构造函数在三种情况下被调用:

    5.2.1.初始化时:

    1 Date date2(date1);
    2 Date date2 = date1;

    5.2.2.实参传递给形参:

    1 Date fun(Date d)
    2 {
    3     xxx
    4 }

    5.2.3.函数返回值:

    1 Date fun(Date d)
    2 {
    3     xxx
    4 }

    6.数组析构与构造相反:(先构造的后析构,后构造的先析构)

    1 delete[] p;

    7.this指针:

    对象在调用成员函数时,先将对象地址赋值给this指针,再用this调用成员对象。

    1 date1.showDate();
    2 void showDate()
    3 {
    4     cout<<(*this).day<<endl;
    5 }

    8.静态数据成员和静态成员函数:static

    8.1.都归类所有的而非对象私有,定义时都要加static
    8.2.静态数据成员必须在类外定义:

    1 int Point::count = 0;

    8.3.静态成员函数只能访问静态数据成员和函数,可用参数传递方式调用非静态成员,可以在类内或类外定义:

    1 void Point::Display(Point& p)
    2 {
    3     xxx
    4 }

    9.常对象,常成员函数,常数据成员:const

    9.1.常对象:const A a(1,2); 等价于 A const a(1,2); a为只读变量
    9.2.常成员函数:

    1 类中声明时:int GetDay() const;
    2 类外定义时:inline int Date::GetDay() const{xxx}

    9.3.常数据成员:

    必须在构造函数的初始化列表中显示定义:

    1 Date::Date(int d):day(d){xxx}

    注意:

    • 常成员函数不可以修改数据成员;
    • 常对象只能调用常成员函数;
    • 一般对象既可以调用常成员函数又可以调用一般成员函数;
    • 对于不修改的成员函数最好定义为const成员函数;
    • 重载时一般对象先调用一般函数若无一般函数则调用常成员函数;

    10.友元函数、友元类和友元成员函数:

    10.1.友元函数:

    普通函数为一个类的友元函数(不是类成员函数却能够访问类的所有成员的函数):

    1 class A
    2 {
    3     public4         friend void set_show(int x, A &a);
    5 };

    10.2.友元类:C类可访问A类成员

     1 class A
     2 {
     3     public:
     4         friend class C;
     5 };
     6 
     7 Class C
     8 {
     9     xxx
    10 };    

    10.3.友元成员函数:

     1 B类成员为A类友元
     2 class A;
     3 class B
     4 {
     5     public:
     6         void set_show(int x,A &a);
     7 };
     8 
     9 class A
    10 {
    11     public:
    12         friend void B::set_show(int x,A &a);
    13 };
    14 
    15 void B::set_show(int x,A &a)
    16 {
    17     xxx
    18 }     

    注意:

    • 友元不能被继承;
    • 友元关系不能传递;
    • 友元关系是单向的;
  • 相关阅读:
    指针
    初级程序员面试不靠谱指南(七)
    初级程序员面试不靠谱指南(六)
    Hadoop 中利用 mapreduce 读写 mysql 数据
    Mapreduce的文件和hbase共同输入
    mapreduce多文件输出的两方法
    mapreduce中一个map多个输入路径
    GDB介绍
    超强的指针学习笔记
    iOS开发之Appstore篇——版本更新
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12124385.html
Copyright © 2011-2022 走看看