燕返 2019-03-22
1.8.1 类的声明和对象的定义
C++中对象的类型称为类(class),类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,对象是具体的,占用存储空间。
类的声明格式:
class 类名
{
public:
公用的数据和成员函数;
private:
私有的数据和成员函数;
};
private和public称为成员访问限定符,被声明为私有的成员,只能被本类中的成员函数引用,类外不能调用,友元类除外。被声明为公用的成员,既可被本类中的成员函数调用,也可以被类外的其他函数调用。protected声明的成员称为受保护的成员。它不能被类外访问,但可以被派生类的成员函数访问(在派生类时这一点很关键,牢记)。
类的声明格式:
类名 对象名;
Student stud1,stud2;
1.8.2 类的成员函数
在类内定义成员函数
在类外定义成员函数(一般推荐)
class Student
{
public:
void display()//共用成员函数的定义
{
cout<<”num:”<<num<<endl;
cout<<”name:”<<name<<endl;
cout<<”sex:”<<sex<<endl;
}
private:
int num;
string name;
char sex;
};
class Student
{
public:
void display();//共用成员函数的声明
private:
int num;
string name;
char sex;
};
void Student::display()
{
cout<<”num:”<<num<<endl;
cout<<”name:”<<name<<endl;
cout<<”sex:”<<sex<<endl;
}
::是作用域限定符,用于声明函数属于哪个类的。::还可用于避免多重继承的二义性。如果没有Student::的限定,display()指的是全局作用域中的display()函数。
若在类中声明成员函数为:
inline void display();
inline void Student::display(){}//在类外定义display函数为内置函数
则表示类的成员函数为内置函数。如果类中定义的成员函数不包括循环等控制结构,则C++默认它们为内置函数。如果再类外定义,则不默认为内置函数,必须加inline作显式声明。
不同对象的数据成员是一般是不同的,因此每个对象所占用的存储空间只是该对象数据部分所占用的存储空间,不包括成员函数所占用的存储空间。成员函数是存储在对象空间之外的,不论它是在类内定义还是在类外定义,用inline都不能改变。
1.8.3 对象成员的引用
访问对象中的成员有三种方法:通过对象名和成员运算符访问对象中的成员;通过指向对象的指针访问对象中的成员;通过对象的引用变量访问对象中的成员。
通过对象名和成员运算符访问对象中的成员
通过指向对象的指针访问对象中的成员
通过对象的引用变量访问对象中的成员
对象名.成员名
stud1.display();
stud1.num=10;//错误,私有成员不能被外界引用
Student stud1,*p;
p=&stud1;
(*p).display();
Student stud1;
Student &stud2=stud1;//定义Student类引用变量stud2,并使之初始化为stud1
stud2.display();
1.8.4 类的封装性和信息隐蔽
一般把所有的数据指定为私有,把需要被外界调用的成员函数指定为公用的,外界可以通过公用的函数实现对私有数据的操作。共用成员函数就是用户使用类的公用接口,或称类的对外接口。类外可以通过调用共用成员函数引用甚至修改私有成员。
一般把类的声明放在指定头文件内。
1.8.5 类和对象的简单应用
Eg:如何引用多个对象的成员
#include<iostream>
using namespace std;
class Time
{
public:
int hour;
int minute;
int sec;
};
int main()
{
void set_time(Time &);
//声明set_time函数,用于输入时间
void show_time(Time &);
//声明show_time函数,用于显示时间
Time t1;
set_time(t1);
show_time(t1);
Time t2;
set_time(t2);
show_time(t2);
return 0;
}
void show_time(Time &t)
//函数的形参t是引用变量,t是t1的别名
{
cin>>t.hour>>t.minute>>t.sec;
}
void show_time(Time &t)
{
cout<<t.hour<<”:”<<t.minute<<”:”<<t.sec<<endl;
}
#include<iostream>
using namespace std;
class Time
{
public:
void set_time();//声明成员函数
void show_time();
private:
int hour;
int minute;
int sec;
};
int main()
{
Time t1,t2;
t1.set_time();
//调用成员函数,向t1的成员输入数据
t1.show_time();
//调用成员函数,输出t1的数据
t2.set_time();
t2.show_time();
return 0;
}
void Time::set_time()
//类外定义函数要指定作用域
{
cin>>hour>>minute>>sec;
}
void Time::show_time()
{
cout<<hour<<”:”<<minute<<”:”<<sec<<endl;
}
例 1.8.1 用类的方法找出一个整形数组中的最大值
#include<iostream>
using namespace std;
class Array_max
{
public:
void set_value();//声明成员函数,输入数组元素的值
void max_value();//声明成员函数,找到数组元素的最大值
void show_value();//声明成员函数,输出数组元素的最大值
private:
int array[10];
intt max;
};
void Array_max::set_value()//定义成员函数
{
int i;
for (i=0;i<10;i++)
cin>>array[i];
}
void Array_max::max_value()
{
int i;
max=array[0];
for (i=1;i<10;i++)
if (array[i]>max) max=array[i];
}
void Array_max::show_value()
{
cout<<”max=”<<max<<endl;
}
int main()
{
Array_max arrmax;//定义对象arrmax
arrmax.set_value();
arrmax.max_value();
arrmax.show_value();
return 0;
}其实做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这里我要推荐c++交流群:648778840,不管你是小白还是大牛欢迎入住大家一起交流成长。小编会在群中不定期分享干货源码,包括我精心整理的一份c++零基础教程。欢迎各位感兴趣的的小伙伴。
学习思路:
学习资料: