从面向过程到面向对象
如果深究C语言编程的核心思想,用面向过程来总结是最合适不过的了。体会一下,之前我们所学更多的在考虑逻辑、过程,程序在这一步该做什么,在下一步又该做什么;总之我们在C语言的编程中,一直在围绕 “过程” 二字展开工作。
其实我们大脑的运行和思考就是在做面向过程的工作,所以我们在“面向过程”的编程中更得心应手。但是任何事物都有两面性,我们在思考中省了力气,在实际开发中就得加把劲了。在开发大型项目时,使用“面向过程”思维,会让我们的程序越来越难以把控,甚至失去控制,而且后期维护、更新成本都很大,所以为了解决这个问题,“C++面向对象” 思想就孕育而生。
面向对象编程,最重要的第一个概念:类
“类”是一个抽象的概念不是具体的某个变量而是一类有着相似特征的变量。
“类”,是一种特殊的“数据类型”,不是一个具体的数据,在用法上和 基本数据类型(char/int/short/long/long long/float/double)相似却又是天差地别
//在Human.h文件中是对类的声明
#pragma once //表示只加载一次头文件
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
// 定义一个“人类”
class Human {
public: //公有的(外部对象可以访问的)
Human(string name, int age); //构造函数
~Human(); //析构函数
void eat(); //方法, “成员函数”
void sleep();
void play();
string getName()const;
int getAge()const;
private: //私有的(外部对象无法访问的)
string name; //类内的变量,“数据成员”
int age;
};
//在Human.c文件中对类内的方法逐一实现
#include <iostream>
#include <stdio.h>
#include "Human.h"
void Human::eat() {
cout << "吃炸鸡,喝啤酒!" << endl;
}
void Human::sleep() {
cout << "我正在睡觉!" << endl;
}
void Human::play() {
cout << "我在唱歌! " << endl;
}
string Human::getName() {
return name;
}
int Human::getAge() {
return age;
}
Human::Human(string name, int age){
this->name = name;
this->age = age;
}
Human::~Human(){
/*此处释放动态内存,因为我们并没有申请动态内存,
所以也不需要释放,此处为空即可*/
}
//主函数标准写法,应当写在另一个.cpp文件中,在下只是图省事,列位不要这样
int main(void) {
Human zhangshan("张三",20);
//声明一个Human类的对象 zhangshan
//并对张三赋予初始值 姓名:“张三”,年龄:20
//Human在这里的用法和基本数据类型一样
//类就是一个特殊的数据类型
zhangshan.eat();
zhangshan.sleep();
zhangshan.play();
//调用zhangshan这个对象的方法来得到我们给实现的信息
// 非法使用(错误的)
cout << "年龄" << h1.age << endl;
//直接访问私有成员,将无法通过编译
//age在实现当中是private私有的,不能通过对象进行外部访问
//正确使用
cout << "年龄" << h1.getAge() << endl;
//通过我们的public方法来实现访问
//这样我们的数据成员就不会暴露出来,整个程序的安全性大大提高
system("pause");
return 0;
}