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 ; 
}

  

原文地址:https://www.cnblogs.com/277223178dudu/p/9821390.html