一,过程性编程和面向对象编程
1)采用过程性编程方法,首先考虑要遵循的步骤,然后考虑如何表示这些数据。
2) 采用面向对象编程,首先从用户角度考虑对象,描述对象所需要的数据,以及描述用户与数据交互所需要的操作。完成对接口的描述后,需要确定如何实现接口和数据存储,最后使用心得设计方案创建出程序。
二,抽象和类
1)类:将抽象转换为用户定义类型的C++工具,将数据表示和操纵数据的方法组合成一个整洁的包。
2)类包括:类声明:数据成员的方式描述数据部分,成员函数的方式描述公有接口
类方法定义:描述如何实现类成员函数
3)数据隐藏:将数据放在类的私有部分
封装:隐藏对象的属性和实现细节,仅对外开发公有接口
4)成员函数:定义时使用 :: 标识函数所属的类;可以访问类的private组件
void stock::buy(double price) // buy函数具有类作用域,其他成员函数不用:: 就可以访问
5)public:定义的函数或成员变量可以被任何方法访问
protect:只可以被本类中方法或派生类中的方法访问
private:只能被本类中方法访问
6)类例子:
#include <iostream>
#include <cstring>
class student
{
private:
char *name;
int num;
double average_score;
int count;
public:
student(char *m_name,int m_num,double m_average_score,int m_count);
student();
~student();
void update(char *m_name,int m_num,double m_average_score,int m_count);
void show();
};
student::student(char *m_name,int m_num,double m_average_score,int m_count)
{
name=m_name;
num=m_num;
average_score=m_average_score;
count=m_count;
}
student::~student()
{
}
student::student()
{
}
void student::update(char *m_name,int m_num,double m_average_score,int m_count)
{
name=m_name;
num=m_num;
average_score=m_average_score;
count=m_count;
}
void student::show()
{
using std::cout;
using std::endl;
cout<<"name:"<<name<<endl;
cout<<"num:"<<num<<endl;
cout<<"average_score:"<<average_score<<endl;
cout<<"count:"<<count<<endl;
}
int main()
{
using std::cout;
char *m_name="tianshuai";
student *s=new student(m_name,01,98.8,5);//new申请 返回指针
s->show();
s->update("xiaoming",02,99.6,10);
s->show();
return 0;
}
7)使用类注意的地方:
1,构造函数和析构函数没有返回类型
2,一般程序不能直接访问数据成员,只能通过成员函数来访问数据成员
3,构造函数时候,不要将类成员名称用作构造函数的参数(m_value)
4,不能使用对象调用构造函数,因为构造函数构造出对象之前对象不存在
5,通常不应该在代码中显式调用析构函数,对象被删除后调用析构函数
三,this指针
this指针用来指向,调用该方法的对象。指向被调用函数所在的类实例的地址
每个成员函数都有一个this指针,指向调用对象
*this 表示对象本身
四,对象数组
默认构造函数(default constructor)就是在没有显式提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有的形参提供默认实参的构造函数定义。如果定义某个类的变量时没有提供初始化式就会使用默认构造函数。
当程序创建没有被显式初始化的类对象时,总是调用默认构造函数。
接口: 函数声明
类作用域:成员变量不能在声明中初始化