#2:C++:类和对象;

                                                         第二章: 类和对象;

    有关概念:
            1. 对象object:
                两个要素:
                    1. 属性(数据):对象的静态特性:班级人数,专业,所在教室
                    2. 行为(函数):对象的动态特性:学习,开会等;
            
            2. 类class:
                对象所抽象出来的数据类型称为 class;
                
            3. 继承:马    白马    雄性白马;
            
            4. 多态:几个相似的对象(继承而产生的不同的类)在接受到同样的消息之后,反应各不相同;


一、类和对象的定义:
    
        类class 是抽象的不占用内存;    对象是具体的,需要占用内存;
        
二、类类型的声明:

        class     类名
        {
            private:
                私有变量和成员函数;
            public:
                公有变量和函数;
        };

例:

class Student
{
	private:
		int num;
		string name;
		char sex;
	public:
		void display();
		
};

void Student :: display()
{
	cout << "Your name is :" << name << endl;
	cout << "Your number is :" << num << endl;
	cout << "Your Sex is :" << sex << endl;
}

Student stu1,stu2; 

int main()
{
	
	return 0;
}
    注: 如果在 类的定义之中不声明private 或者 public 则默认为私有类型;( 与结构体不同 );
           结构体在不声明时,默认为public类型;

    除此之外,还有一种 protected数据类型不能够被类外的函数调用,但是可以被派生类的函数调用(private都不可以);

三、 声明对象的方法:
    1. 先声明类类型,再定义对象:

        Student stu1;
        
    2. 在声明类型的同时定义对象:
        class Student
        {
            ...
            
        }stu1,stu2;

     3. 不出现类名,直接定义对象;

                                                         成员函数:

一、成员函数的定义:
    1. 在类内定义:

class Student
{
	private:
		string name;
		int num;
		char sex;
		
	public:
		void display()
		{
			cout << "Your name is :" << name << endl;
			cout << "Your num is :" << num << endl;
			cout << "Your sex is :" << sex << endl;
		}
		void InputData()
		{
			cout << "Please Input the name,num & sex:" << endl;
			cin >> name >> num >> sex;
		}
}stu[40];


int main()
{
	int n;
	while(1)
	{
		cout << "Please Input the number of the data:" << endl;
		cin >> n ;
		for(int i = 0;	i < n;	i++)
		{
			stu[i].InputData();
		}
		for(int i = 0;	i < n;	i++)
		{
			stu[i].display();
		}
	}
		
	return 0;
}

2. 在类内定义函数:
class Student
{
	private:
		string name;
		int num;
		char sex;
		
	public:
		void InputData();
		void Display();
	
	
}stu[40];

void Student :: InputData()
{
	cout << "Please Input the name,num & sex:" << endl;
	cin >> name >> num >> sex;
}

void Student :: Display()
{
	cout << "Your name is :" << name << endl;
	cout << "Your num is :" << num << endl;
	cout << "Your sex is :" << sex << endl; 
}

int main()
{
	Student stu1;
	
	stu1.InputData();
	stu1.Display();
	
	return 0;
}
     inline 函数:
注:

    为了 减少函数的调用时间,在类体中的的 函数如果不包括循环等结构,一般在情况下都默认为inline类型;
    而在 类外定义的函数,一般情况下不是inline类型;
    
     在类体外定义inline 函数的时候应当注意,必须将类定义和inline函数定义放在同一个cpp文件中,
    否则无法通过编译;


四、成员函数的存储方法:
    系统会 为每一个成员变量分配空间;但是 不会为函数分配空间( 在外部分配 );
    并且 使用同一个this 指针来进行确定是对哪个对象成员进行函数操作;
   

                                                         类声明和成员函数的分离:

    如果一个类被多个程序都使用,每一个程序都需要重新定义这个类,工作量太大了;
    
    所以一般的做法就是将类的声明(和仅仅成员函数的声明)放在指定的头文件中!
    
    此时用户如果想要使用这个类,只需要把有关的头文件包括进来就行了,而不必重新声明;
    
    而且成员函数的定义一般不放在头文件之中,而是被另外放在一个头文件中;
 
例:
    可以分别写两个文件:

//     volume.h

#include<iostream>
using namespace std;

class Volume
{
	private:
		int length;
		int width;
		int height;

	public:
		void set();
		void calcu();
		int vol;
		void display();
		void showvolume(); 
};  

//    volume.cpp

#include"volume.h"

void Volume :: set()
{
	cout << "Please Input L,W,H:" << endl;
	
	cin >> length >> width >> height;
	
	cout << "Data are set!" << endl;
}


void Volume :: calcu()
{
	Volume :: vol = length*width*height;
}

void Volume :: display()
{
	cout << "The length is :" << length << endl;
	cout << "The width is :" << width << endl;
	cout << "The height is :" << height << endl;
}

void Volume :: showvolume()
{
	cout << "The volume is :" << length*width*height << endl;
}

为了组成完整的源程序,还应当包括主函数的源文件:
//    main.cpp

#include"volume.h"

int main() 
{
	Volume test;
	
	test.set();
	test.display();
	test.calcu();
	test.showvolume();
	
	return 0;
} 

注:
    由于将 头文件volume.h放在用户当前目录中,此时头文件应当被双引号“”括起来!!
    
    之后 把多个文件加入到同一个工程之中:

编译时,两个cpp文件分别先编译为,两个.obj文件,然后系统再将他们连接起来,生成exe;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值