【C++基础 】 --- C++ 为什么需要定义成员函数

简介: 【C++基础 】 --- C++ 为什么需要定义成员函数

由面向过程转到面向对象程序时易犯的错误

#include "iostream" //包含C++标准头文件
 
using namespace std; //使用c++标准命令空间的标准定义
 
class circle
{
public:
  double r;
  double pi = 3.14;
  double area = pi*r*r;
 
};
 
int main()
{
  circle circle_1;
  cout << "please input the radius" << endl;
  
  cin >> circle_1.r;
  cout << circle_1.area << endl;
 
  system("pause");
 
  return 0;
}

运行结果如下:

分析错误原因:

1、程序运行到circle1.circle的时候,在栈上分配内存如下(C语言中的内存四区模型同样适用于c++)

2、执行到cin >> circle1.r的时候,我们确实将r的值变成了10.

3、执行到cin <<circle1.area<<endl; 的时候,r的值虽然变为10,但是c++编译器不会主动调用area= pi * r * r;

circle1.area,只是在circle1 circle的时候才执行。

出错的原因:在你通过类型定义变量的时候,area的值就已经确定下来了。

 

 

解决方法:

class circle
{
public:
  double r;
  double pi = 3.14;
  double area;
 
  double getS()
  {
    area = pi*r*r;
    return area;
  }
 
};
 
int main()
{
  circle circle_1;
  cout << "please input the radius" << endl;
  
  cin >> circle_1.r;
  cout << circle_1.getS()<< endl;
 
  system("pause");
 
  return 0;
}

运行结果:

定义成员函数,在调用成员函数的时候,会重新执行该函数。

相关文章
|
1月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
25 2
|
1月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
51 1
|
1月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
18 3
|
1月前
|
存储 编译器 C++
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作(二)
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作
|
1月前
|
存储 编译器 C++
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作(三)
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作
|
1月前
|
存储 编译器 C++
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作(一)
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作
|
2月前
|
C++
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
|
4月前
|
编译器 C++ 运维
开发与运维函数问题之函数的返回类型如何解决
开发与运维函数问题之函数的返回类型如何解决
37 6
|
3月前
|
编译器 C++
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
43 0
|
3月前
|
JSON Android开发 数据格式
Android c++ core guideline checker 应用问题之JSON compilation database的定义如何解决
Android c++ core guideline checker 应用问题之JSON compilation database的定义如何解决