• 《新标准C++程序设计》3.9-3.10(C++学习笔记11)


    一、C++程序到C程序的翻译

    程序示例分析:

    C++:

    class CCar
    {
    public:
    int price;
    void SetPrice
    (int p);
    };
    void CCar::SetPrice
    (int p)
    { price = p; }
    int main() {
    CCar car;
    car.SetPrice(20000);
    return 0;
    }

    C:

    struct CCar {
    int price;
    };
    void SetPrice(struct CCar * this,int p)
    { this->price = p; }
    int main() {
    struct CCar car;
    SetPrice( & car,20000);
    return 0;
    }

    拆分

    (1)C++

    class CCar
    {
    public:
    int price;
    void SetPrice
    (int p);
    };

    C

    struct CCar {
    int price;
    };

    (2)C++

    void CCar::SetPrice
    (int p)
    { price = p; }

    C

    void SetPrice
    (struct CCar * this,int p)
    { this->price = p; }

    (3)C++

    int main() {
    CCar car;
    car.SetPrice(20000);
    return 0;
    }

    C

    int main() {
    struct CCar car;
    SetPrice( & car,20000);
    return 0;
    }

    二、this指针的作用

    其作用就是指向成员函数所作用的对象

    非静态成员函数中可以直接使用this来代表指向该函数作用的对象的指针。

    程序示例分析:

    (1)

    class Complex {
    public:
    double real, imag;
    void Print() { cout << real << "," << imag ; }
    Complex(double r,double i):real(r),imag(i){ }
    Complex AddOne() {
    this->real ++; //等价于 real ++;
    this->Print(); //等价于 Print
    return * this;}
    }; 
    int main() {
    Complex c1(1,1),c2(0,0);
    c2 = c1.AddOne();
    return 0;
    } 

    输出:2,1

    (2)

    class A
    {
    inti;
    public:
    void Hello() { cout << "hello" << endl; }
    };
    int main()
    {
    A * p = NULL; 
    p->Hello();
    } 

    输出:hello

    拆分:

    1)C++

    void Hello() { cout << "hello" << endl; }

    C

    void Hello(A * this ) { cout << "hello" << endl; } 

    2)C++

    p->Hello();

    C

    Hello(p);

    (3)

    class A
    {
    int i;
    public:
    void Hello() { cout << i << "hello" << endl; }
    };
    int main()
    {
    A * p = NULL;
    p->Hello(); 
    }

    出错!!!

    拆分:

    1)C++

    p->Hello();

    C

    Hello(p);

    2)C++

    void Hello() { cout << i << "hello" << endl; }

    C

    void Hello(A * this ) { cout << this->i << "hello"<< endl; } 

    this为NULL,出错!!

    静态成员函数中不能使用 this 指针!

    因为静态成员函数并不具体作用与某个对象!

    因此,静态成员函数的真实的参数的个数,就是程序中写出的参数个数!

    Question:

    以下说法不正确的是:

    A) 静态成员函数中不能使用this指针

    B) this指针就是指向成员函数所作用的对象的指针

    C) 每个对象的空间中都存放着一个this指针

    D) 类的非静态成员函数,真实的参数比所写的参数多1

    答案:C

    三、在多个文件中使用类

    在有多个文件的C++程序中,如果多个.cpp文件都用到同一个类,可以将类的定义写在一个头文件中,然后在各个.cpp文件中包含该头文件。类的非内联成员函数的函数体只能出现在某一个.cpp文件中,不能放在头文件中被多个.cpp文件包含,否则链接时会发生重复定义的错误。类的内联成员函数的函数体最好写在头文件中,这样编译器在处理内联函数的调用语句时,就能在本文件包含的头文件中找到内联函数的代码,并将这些代码插入调用语句处。内联成员函数放在头文件中被多个.cpp文件包含,不会导致重复定义的错误。

  • 相关阅读:
    55. 跳跃游戏
    45. 跳跃游戏 II
    对称的二叉树
    字符型图片验证码,使用tensorflow实现卷积神经网络,进行验证码识别CNN
    python版本升级及pip部署方法
    Two Sum [easy] (Python)
    工作中常用的linux命令(持续更新)
    PAT-1001. 害死人不偿命的(3n+1)猜想 (15)
    C++二维数组的动态声明
    19. Remove Nth Node From End of List(C++,Python)
  • 原文地址:https://www.cnblogs.com/cyn522/p/12287263.html
Copyright © 2020-2023  润新知