C++学习 面向对象

 参考书籍《从新手到高手C++全方位学习》

 
==================面向对象=================================
面向对象的四个特征:抽象、封装、继承、多态
	
面向过程:思想是将一个程序分成若干个过程,然后写出每个过程的算法

面向对象:它将自然界的所有事物都看做不同的实体,也就是对象。每种对象都有自己的
状态和行为。这些不同的对象之间相互联系而又相互作用。从而构成前边万化的大自然。
在面向对象的程序设计中,程序员不需要考虑数据结构和操作函数,只需考虑对象即可。

#include<iostream>
using namespace std;
class 人类   
{
public :     共有的意思是该类的对象可以直接访问这些成员
	void 获得身高();
	void 获得体重();
private :    表示它后面的成员都是私有的,不能被对象直接访问,必须通过共有的成员函数才能访问
	int 身高;
	int 体重;
};
void main(void)
{
	人类 Gino;  定义了一个对象Gino
}

声明了一个类,并没有分配内存。它告诉编译器类的大小。类的大小是根据变量来定的
例子中的类的大小是8个字节(一个int占4个字节)。该类的方法是不占内存的
private 表示后面的数据成员是要被各个对象封装的,都是对象私有的,不能共享。

要选定一种命名习惯,并在整个程序中都使用这种习惯表示,这样会增强可读性。
===============================================================
#include<iostream>
using namespace std;
class student
{
public :
	void getStature(){cout<<stature;}  // 函数定义方法1 声明的同时进行定义
	void setStature(int x){stature = x;}
	void getSex();
	void setSex(int y);
private :
	int stature;
	int sex;
};
 void student::getSex()  //函数定义方法2 在类外面定义函数【类中声明,一定在类外定义】
 {
	cout<<sex;
 }
 void student::setSex(int y)
 {
	sex = y;
 }

int main()
{
	student Gino;
	Gino.setStature(100);   //共有方法访问私有成员,私有成员不能直接访问。
	cout<<"Gino's stature";
	Gino.getStature();
	cout<<endl;
	Gino.setSex(1);
	cout<<"Gino's gender";
	Gino.getSex();

	return 0;
}
===============================================================
不能给类赋值,就正如不能给int这个类型赋值一样。

函数是用来执行一定功能的代码块
成员函数则是只能被类的对象所使用的函数。

===============================================================
类的成员默认为私有!!!

#include<iostream>
using namespace std;
class Human
{
//public:
    int weight;
public :
    void setWeight(int x )       赋值操作
    {
        if(x>0 && x<100)
        {
             weight = x;
        }
        else
            cout<<"enter a number greater than 0 and less than 100"<<endl;
    }
    int show(){return weight;}  读取操作

};
int main(void)
{
    Human Gino;
    Gino.setWeight(90);
    cout<<Gino.show()<<endl;

    return 0;
}
一般将类的数据数据成员设置为私有,而使用共有的函数来访问它们。
这样的好处是数据的赋值和读取时分开操作的,修改其中一个不需要考虑另一个
私有数据成员以后,各个对象也不可以直接访问并修改数据,提高了安全性。

=========================内联函数==================================
为什么将成员函数的声明和定义分开写?
【因为写在一起,该函数会自动成为内联函数,如果该函数代码很长,重复调用会增大程序体积】

当定义函数以后,编译器会为其在内存中创建一个指令集。当调用这个函数的时候
程序就得来回跳转,影响执行效率。为了解决这个问题,C++提供了inline声明函数
inline int function();
则编译器不会创建真正的函数,而只是将这个内联函数的所有代码拷贝到调用函数中,
这样在执行调用函数的时候就不用来回跳转,可提高效率。

但是提高效率的代价是增加代码长度,增大程序体积。
使用条件:当函数很小、代码短的时候使用内联函数。

一般内联函数:
#include<iostream>
using namespace std;
inline int fun(int x);  //声明为内联函数
int main(void)
{
    int x;
    cout<<"enter a number:";
    cin>>x;
    cout<<endl;
    cout<<fun(x)<<endl;   //不会跳转

    return 0;
}
int fun(int x)    //定义函数
{
    return x;   //函数体的代码会被直接拷贝到调用函数fun(x)处
}

成员内联函数:
#include<iostream>
using namespace std;
class A
{
public :
    inline void fun( int m ); //类中声明 一定在类外定义【将成员函数声明为内联函数】
    int show(){return x;}    //写在一起自动转换为内联函数【成员函数是内联函数】
private :
    int x;
};  //分号!!!
int main(void)
{
    A a;
    int x;
    cout<<"enter a number:";
    cin>>x;
    a.fun(x);   //不会跳转
    cout<<a.show();

    return 0;
}
void A::fun(int m)    //类外面定义函数
{
    x=m;
}


=========================const 成员函数==============================
若不想让成员函数修改成员变量的值,就将【成员函数】声明为const

#include<iostream>
using namespace std;
class A
{
public :
    void fun(int x , int y) {i=x;j=y;} //这里如果声明为const就会报错
    void print()const{cout<<"两数相乘为:"<<i*j<<endl;}
private :
    int j;
    int i;
};
int main(void)
{
    A a;
    a.fun(2,4);
    a.print();

    A b;
    b.fun(3,4);
    b.print();
    return 0;
}

===========================构造函数===================================
#include<iostream>
using namespace std;
class rectangle
{
public :
    rectangle(int l,int w){length=l;width=w;}  //构造函数 是内联函数 无返回值
    retangle(){}        //这就是默认构造函数
    int area(){return length*width;}
private :
    int length;
    int width;
};
int main(void)
{
    rectangle a(3,4);
    cout<<"面积是:"<<a.area();
    rectangle b; //如不提供构造函数,那么系统会自动创建一个默认的构造函数
    return 0;
}

===========================析构函数================================
析构函数用于在对象销毁以后清除它所占的内存空间
每个对象在创建的时候都会自动调用该类的默认构造函数
对象生命结束时,编译器会自动调用类的默认析构函数来释放掉该对象所占的内存
#include<iostream>
using namespace std;
class A
{
public :
    A(){};
    ~A(){}; //析构函数无返回值、无参数  一个类只有一个析构函数
};
int main(void)
{
    A a; //A a[2];
    
    return 0;
}
 创建对象数组A a[2]会执行两次构造函数,
 程序结束时,会调用两次析构函数,释放两个对象所占用的内存


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值