一直以来对C和C++的区别抱有较大的疑惑的,这次进行总结。
一般而言,都指定C语言是面向过程的,而C++语言是面向对象的,再有的,就是C++比C高级一点,C相对于C++更偏向于底层。但再往深纠,到底什么是面向过程,什么是面向对象,就糊涂了。这次就进行一次区别。
如下,使用C/C++两个版本的编写来实现求一个圆的面积的功能的代码,通过比对来看出这两种语言的区别:
首先,是C语言版本:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void main()
{
double r = 0;
double s = 0;
cout<<"请输入圆形的半径:";
//cin 标准输入 代表键盘
cin >> r;
cout<<"r的值是:" << r <<endl;
s = 3.14*r*r;
cout<<"圆形的面积是s:" <<s << endl;
system("pause");
}
如上,就是一个非常简单的,通过C语言来实现求取一个圆的面积的过程,可以看出,整个代码编写的顺序非常的流畅,从上到下,代码的逻辑顺序和代码的编写顺序也是完全吻合的。
再看C++版本的编写:
#include "iostream" //包含c++的头文件 //iostream.h
using namespace std; //使用命名空间 std 标准的命名空间 (在这个命名空间中定义了很多标准定义)
//在C++中 定义了一个自定义数据类型 MyCicle 圆形
class MyCicle
{
public:
double m_s; //圆的面积 属性 成员变量
double m_r; //圆的半径
public:
void setR(double r) //成员函数
{
m_r = r;
}
double getR() //成员函数
{
return m_r;
}
double getS()
{
m_s = 3.14*m_r*m_r;
return m_s;
}
};
void main()
{
MyCicle c1, c2, c3; //用类 定义 变量 对象
double r;
cout << "请输入c1圆形的半径:";
cin >> r;
//给c1圆形的属性赋值
c1.setR(r);
cout << "c1圆形的面积是:" << c1.getS()<<endl;
system("pause");
}
经过对比可以发现,C++版本编写的代码,定义了一个类,然后,又在类中加入了变量,成员函数等内容,那么,就可以引出结论了:
用面向对象的方法做编程,第一步是做抽象(面向对象就是将现实生活中的人事物进行抽象),以求圆的面积为例进行说明,我要求一个圆的面积,那么,就需要先定义一个圆,这么一个类,然后,再从这个类型中衍生出多个对象,进行定义。
C++中,定义了一个类,可以再类里面写函数,这一点是和C语言不一样的!
面向过程是一步一步的,面向对象是不停的去修改所定义的类,不是一步一步的按顺序去执行的。
面向过程加工的是一个一个的函数,面向对象加工的是一个一个的类。
类是一个数据类型,是固定大小的内存块的别名,但是,定义一个类,这是一个抽象的概念,不会给你分配内存,而只有当数据类型中定义变量的时候,才会进行分配内存。(后期详补)
抛砖:
c++编译器如何区分是c1对象还是c2对象调用类的方法呢?
class类是一个数据类型和对象是1对n的关系。
学习c++的方法是和面向过程是不一样的。
总体代码
dm01_hello.cpp
/*
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void main()
{
printf("hello...\n");
system("pause");
return ;
}
*/
#include "iostream" //包含c++的头文件 //iostream.h
using namespace std; //使用命名空间 std 标准的命名空间 (在这个命名空间中定义了很多标准定义)
void main01()
{
//printf("hello....\n");
//cout 标准输出 黑屏幕,
//<< 左移操作符 在c++里面 功能的改造(增强)===>C++ 语言操作符重载 //3day
//endl \n
//打印到屏幕 并且换行
cout << "hello...."<<endl;
system("pause");
}
//求圆的面积
//用面向过程的方法求解圆形的面积
// << >> 不会用: 标准输入cin和标准输出cout 始终写在操作符的左边
void main02()
{
double r = 0;
double s = 0;
cout<<"请输入圆形的半径:";
//cin 标准输入 代表键盘
cin >> r;
cout<<"r的值是:" << r <<endl;
s = 3.14*r*r;
cout<<"圆形的面积是s:" <<s << endl;
system("pause");
}
//在C++中 定义了一个自定义数据类型
struct Circle01
{
double m_s; //圆的面积
double m_r; //圆的半径
};
//在C++中 定义了一个自定义数据类型 MyCicle 圆形
class MyCicle
{
public:
double m_s; //圆的面积 属性 成员变量
double m_r; //圆的半径
public:
void setR(double r) //成员函数
{
m_r = r;
}
double getR() //成员函数
{
return m_r;
}
double getS()
{
m_s = 3.14*m_r*m_r;
return m_s;
}
};
//
void main03()
{
MyCicle c1, c2, c3; //用类 定义 变量 对象
double r;
cout << "请输入c1圆形的半径:";
cin >> r;
//给c1圆形的属性赋值
c1.setR(r);
cout << "c1圆形的面积是:" << c1.getS()<<endl;
system("pause");
}
//用面向对象的方法
//1 类的抽象 成员变量和成员函数
//2 实例化 类的对象
//3 求面积
//面向过程加工的是 一个一个的函数
//面向对象加工的是:一个一个的类
//4 main集成测试
//思考1:类的调用 执行过程分析==>类代码不是一步一步指向
//类是一个数据类型,(固定大小内存块的别名); 定义一个类,是一个抽象的概念,不会给你分配内存
//用数据类型定义变量的时候,才会分配内存
//思考2:抛砖: c++编译器是如何处理 多个对象,调用类的成员函数的;具体一点:如何区分是c1 c2 c3 调用了getS,抛砖.....
void main04()
{
MyCicle c1, c2, c3; //用类 定义 变量 对象
double r1, r2, r3;
//圆形1
cout << "请输入c1圆形的半径r1:";
cin >> r1;
//给c1圆形的属性赋值
c1.setR(r1);
cout << "c1圆形的面积是:" << c1.getS()<<endl;
//圆形2
cout << "请输入c2圆形的半径r2:";
cin >> r2;
//给c1圆形的属性赋值
c2.setR(r2);
cout << "c2圆形的面积是:" << c2.getS()<<endl;
system("pause");
}