zoukankan      html  css  js  c++  java
  • c++面向过程和面向对象-C++编译器是如何管理类和对象的

    1,c++编译时如何区分对象调用类的方法?

    C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类。从计算机的角度,程序依然由数据段(栈区内存)和代码段(代码区内存)构成。

    C++类对象中的成员变量和成员函数是分开存储的

    成员变量:

    普通成员变量:存储于对象中,与struct变量有相同的内存布局和字节对齐方式

    静态成员变量:存储于全局数据区中

    成员函数:存储于代码段中。

    C++会将class中的成员变量提取出来放在栈区的一个同名的struct里面,将成员函数提取出来放在代码区,同时会对起做一些修改,就是默认添加一个this指针的参数,这样在具体对象调用的时候如a.getI()就会将this传递过去,(注:每一个类的对象都会默认包含一个this指针的成员变量),这样就是区分到底是哪一个对象去调用类的成员函数了。

    用结构化方法编程,求圆的周长和面积:
    #include<iostream.h>
    using name std;
    void main ()
    { double r, girth, area ; 		
       const double PI = 3.1415 ;
       cout << "Please input radius:
    " ; //操作符重载
       cin >> r ;  //输入
       girth = 2 * PI * r ; 
       area = PI * r * r ;
       cout << "radius = " << r << endl ; 
       cout << "girth = " << girth << endl ;
       cout << "area = " << area << endl ;
    }
    用面向对象方法编程,求圆的周长和面积
    #include<iostream.h> 
    using name std;
    class Circle
    {  double radius ; //成员变量
      public : //类的访问控制
        void Set_Radius( double r ) { radius = r ; } //成员函数
        double Get_Radius()  { return  radius ; } //通过成员函数设置成员变量
        double Get_Girth()     { return  2 * 3.14f * radius ; } //通过成员函数获取成员变量
        double Get_Area()     { return  3.14f * radius * radius ; }
    } ;
    void main()
    { 
    Circle A, B ; //用类定义对象
       A.Set_Radius( 6.23 ) ; //类的调用
       cout << "A.Radius = " << A.Get_Radius() << endl ;
     cout << "A.Girth = " << A.Get_Girth() << endl ;
       cout << "A.Area = " << A.Get_Area() << endl ;
       B.Set_Radius( 10.5 ) ;
       cout << "B.radius = " << B.Get_Radius() << endl ;
       cout << "B.Girth=" << B.Get_Girth() << endl ;
       cout << "B.Area = " << B.Get_Area() << endl ; 
    }
    

      

  • 相关阅读:
    拦截器-监听器-过滤器的区别
    实例Rest风格+SpringMVC+中文乱码解决
    Nginx功能详细介绍(大而全)
    Nginx应⽤场景之反向代理
    SpringMVC参数传递之日期类型
    SpringMVC请求参数绑定回顾
    数据输出机制之Model、Map及ModelMap回顾
    ReactHook快速上车
    Chrome性能调优技巧
    移动端适配的最佳实践
  • 原文地址:https://www.cnblogs.com/277223178dudu/p/9821390.html
Copyright © 2011-2022 走看看