从C到C++的升级(1)
C:面向过程=数据+算法
C++ = C+面向对象思想
面向对象:对象+消息
C++优点:维护性,复用性,扩展性,灵活性
C++特点:封装 ,继承 ,多态 ,抽象
从C到C++的升级:
1.声明定义
C++所有的变量都可以使用时才定义:
for(int i = 0;i < 10 ; i++)
{
...
}
变量i在使用完成后自动释放,但是C语言不行
封装:主要用类来解决,类是对象的抽象,对象是类的实例。
/**************** TEST.h **************/
#ifndef _TEST_H_
#define _TEST_H_
class Test //类名称,类名首字母应大写
{
public: //三个是限定符,限定对象的访问权限
int GETx(); //类里的函数称为方法
private:
int x_; //类里的变量称为属性(成员变量)
protect:
};
#endif
/******************* TEST.cpp ****************/
#include "TEST.h"
int Test::Getx()
{
return x_;
}
/****************** main.cpp **************/
#include <iostream>
int main()
{
Test t; //用 Test 类实例一个名为 t 对象
int num = t.Getx();
cout << "num = " << num << endl;
return 0;
}
public:在类外,通过对象,则可以访问。一般在此封装方法(成员函数);
private:不能通过对象在类外访问,同时子类也不能访问。一般在此封装属性(成员变量);
protect:子类能访问但外部对象不能访问
成员不要在类内初始化,可以通过成员函数对成员变量进行初始化
补充:成员变量初始化
1. 普通的变量:
一般不考虑啥效率的情况下 可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。
class Test
{
public:
int data;
public:
Test(); //构造函数
};
/***********************************************/
Test::Test( ):data(0) //初始化列表方式
{
//data = 0; //赋值方式
};
2.static 静态变量:
static变量属于类所有,而不属于类的对象,因此不管类被实例化了多少个对象,该变量都只有一个。在这种性质上理解,有点类似于全局变量的唯一性。
class Test
{
public:
static int sum;
public:
Test();
};
/****************************************/
int Test::sum=0; //类外进行初始化
3.const 常量变量:
const常量需要在声明的时候即初始化。因此需要在变量创建的时候进行初始化。一般采用在构造函数的初始化列表中进行。
class Test
{
public:
const int max;
public:
Test();
};
Test::Test():max(100)
{
}
总结起来,可以初始化的情况有如下四个地方:
1、在类的定义中进行的,只有const 且 static 且 integral 的变量。
2、在类的构造函数初始化列表中, 包括const对象和Reference对象。
3、在类的定义之外初始化的,包括static变量。因为它是属于类的唯一变量。
4、普通的变量可以在构造函数的内部,通过赋值方式进行。当然这样效率不高。