C++第七课:类的使用[查漏补缺]
前面小编只是大概说了类的简单使用,并不代表全部的类用法。这里面还有重载函数如何写有何用、友元函数如何写有何用、静态变量如何定义、静态函数如何定义、父类如何初始化等等。
我们都知道,一个函数需要几个条件才能成立,修饰符+函数名+参数。
而说到函数的重载,它是有规则的,编译器不容两个完全一模一样的函数存在,说简单点就是修饰符相同+函数相同+参数也相同。
这不符合编译器的规则,会造成编译器报错!
重载的理念一出,就告诉了编译器函数重名可以用,但有一个条件,函数名相同,修饰符和参数就必须有一个不同。
在这里,有着C语言基础的朋友,想必能想到了吧。
举个例子,假如你创建了个类:Teacher
{
....
public:
//重载函数
void SetTeacherInformation(char *srcSource);
void SetTeacherInformation(char *srcSource, int age);
int SetTeacherInformation(char *srcSource, int age, char *sex);
....
}
这三个函数名完全相同,小编对修饰符、参数进行了改变,函数名完全一样,但是编译器没报错,因此,就能看出重载的写法了。
关于重载的用法不单单于此,编译器为我们编好的就有着太多函数,小编捡几个常见的写写。
大家对于加、减、乘、除,或许不陌生吧,下面就用这个做最简单的重载函数。
{
...
public:
//重载函数+-*/
Teacher & operator+(Teacher & teacher);
Teacher & operator-(Teacher & teacher);
Teacher & operator*(Teacher & teacher);
Teacher & operator/(Teacher & teacher);
...
}
这里的重载函数跟普通函数的写法一样,同样需要在类内部声明定义
{
...
//重载函数+-*/
Teacher & Teacher::operator+(Teacher & teacher)
{
a += teacher.a;
b += teacher.b;
return *this;
}
Teacher & Teacher::operator-(Teacher & teacher)
{
a -= teacher.a;
b -= teacher.b;
return *this;
}
Teacher & Teacher::operator*(Teacher & teacher)
{
a *= teacher.a;
b *= teacher.b;
return *this;
}
Teacher & Teacher::operator/(Teacher & teacher)
{
a /= teacher.a;
b /= teacher.b;
return *this;
}
...
}
为了方便用起来,请添加两个int类型的私有属性变量并进行封装。一个带参构造,参数就是两个int类型,同样达到为这两个私有属性进行封装的效果。
小编用class名为Teacher.就用带参构造的方法,省事。
封装的写法,意思就是说初始化Teacher这个类的对象时,就为两个两个私有属性赋值。
Teacher::Teacher(int a,int b)
{
this->私有属性变量=a;
this->私有属性变量=b;
}
这样我们在实例化对象时,就可以得到私有属性的值了。既然已写好了,我们就试着调用这个函数运行看看是否跟想象中的一样。
主体源文件Test.cpp
{
...
Teacher teacher(6,6);
Teacher teacher2(6,6);
teacher.operator+(teacher2);
cout << teacher.GetA() << "\t" << teacher.GetB() << endl;
...
}
结果就是两个12 12.
友元函数。个人觉得你不到那一步学了也用不到,对于项目而言,这个友元的用法完全破坏了封装的隐藏性,它就像是金手指,能获取到类的私有属性,有兴趣的朋友可以自己去找他人的博客了解下。
下面说说静态变量、静态函数的用法以及规则。
1.静态变量不能被非静态函数调用。
2.静态变量初始化方式跟普通的变量不一样,既然非静态函数不能调用,那么也就是说不能直接赋值。
要像函数那般写出来,我举个例子,假如有个static int a;的私有属性,它的赋值方式是:
int 类名::a = 数值自己定义;
3.全局静态变量不赋值的情况下,编译器自动为其赋值为0.(在静态数据区,内存中所有的字节默认值都是0x00【他人的说法】)。
4、反过来,静态成员函数不能调用非静态成员属性(静态成员必须与特定的成员相对【编译器的说明】)
父类的初始化,说白了就是两种,指针对象和对象。
{
...
Teacher t1;
Student s;
t1 = s; //子类直接赋值给父类对象
Teacher *t2 = &s; //子类对象地址引用给父类指针对象
Teacher &t3 = s; //子类对象初始化基类引用
Student *s2 = &s;
Teacher *t4;
t4 = s2; //子类指针地址赋值给基类指针地址
...
}
学会了今天的内容,就等于进步一点,凡事得积累,这过程跟就像是C语言,而自己本身就如同对象。学这门语言,操之过急那就是好高骛远,如果这些知识无法学会,后面的就更难了,既然学起来就得有觉悟!

浙公网安备 33010602011771号