1.赋值运算符
// 赋值运算符:类名& operator=(const 类名& 变量名)
Student& operator=(const Student &s)
{
id = s.id;
name = s.name;
Student& operator=(const Student &s)
{
id = s.id;
name = s.name;
return *this;
}
}
// 赋值 operator=(s3, s1)
// s3.operator=(s1)
// 如果一个类没有写赋值运算符重载函数,则编译器会自动生成一个赋值运算符重载函数
// 做值的复制
// s3.operator=(s1)
// s3.operator=(s1)
// 如果一个类没有写赋值运算符重载函数,则编译器会自动生成一个赋值运算符重载函数
// 做值的复制
// s3.operator=(s1)
Teacher& operator=(const Teacher &t)
{
// 0、判断是否是对象本身
if (this == &t)
return *this;
{
// 0、判断是否是对象本身
if (this == &t)
return *this;
// 1、释放原来的空间
if (name != NULL)
delete[] name;
if (name != NULL)
delete[] name;
// 2、开辟新空间
this->name = new char[20];
this->name = new char[20];
// 3、复制数据
this->id = t.id;
strcpy(this->name, t.name);
this->id = t.id;
strcpy(this->name, t.name);
return *this;
}
}
// 默认的赋值运算符重载函数做的也是浅拷贝
2.函数调用运算符
void operator()(int a)
{
printf ("a = %d\n", a);
}
{
printf ("a = %d\n", a);
}
s(10); // s是一个对象,但是可以像函数一样使用 ====> 函数对象 仿函数
3.逻辑运算符
bool operator&&(const A& a)
{
return a.a && this->a;
}
{
return a.a && this->a;
}
// 逻辑运算符内部实现了短路规则
// a.operator&&(b=c);
// 运算符重载本质上是一个函数,函数要先计算实参的值,再将实参传给形参
// 所以是无法实现短路规则的
// 运算符重载本质上是一个函数,函数要先计算实参的值,再将实参传给形参
// 所以是无法实现短路规则的
a && (b = c);
4.继承的概念
// 继承的语法:类A 继承 类B
// class A : 访问控制符 基类名
// class A : 访问控制符 基类名
class Animal// 动物: 父类、基类
// 狗:子类 派生类
class Dog : public Animal
class Dog : public Animal
5.继承中的访问控制权限
// 1、基类成员在派生类中的权限:在基类中的权限*继承时的权限 = 两者中权限较低者
// 2、不管以何种方式继承,基类的私有成员在派生类中是不可使用
// 公有继承
// 1、基类中的 public 成员:在派生类中还是 public 属性,在类的内部和外部都可以使用
// 2、基类中的 protected 成员:在派生类中还是 protected 属性,在类的内部可以使用,在类的外部不可以使用
// 3、基类中的 private 成员:在派生类中还是 private 属性,在类的内部和外部不可以使用
// 2、不管以何种方式继承,基类的私有成员在派生类中是不可使用
// 公有继承
// 1、基类中的 public 成员:在派生类中还是 public 属性,在类的内部和外部都可以使用
// 2、基类中的 protected 成员:在派生类中还是 protected 属性,在类的内部可以使用,在类的外部不可以使用
// 3、基类中的 private 成员:在派生类中还是 private 属性,在类的内部和外部不可以使用
// 保护继承
// 1、基类中的 public 成员:在派生类中是 protected 属性,在类的内部可以使用,在类的外部不可以使用
// 2、基类中的 protected 成员:在派生类中是 protected 属性,在类的内部可以使用,在类的外部不可以使用
// 3、基类中的 private 成员:在派生类中是 private 属性,在类的内部和外部不可以使用
// 1、基类中的 public 成员:在派生类中是 protected 属性,在类的内部可以使用,在类的外部不可以使用
// 2、基类中的 protected 成员:在派生类中是 protected 属性,在类的内部可以使用,在类的外部不可以使用
// 3、基类中的 private 成员:在派生类中是 private 属性,在类的内部和外部不可以使用
// 私有继承
// 1、基类中的 public 成员:在派生类中是 private 属性,在类的内部可以使用,在类的外部不可以使用
// 2、基类中的 protected 成员:在派生类中是 private 属性,在类的内部可以使用,在类的外部不可以使用
// 3、基类中的 private 成员:在派生类中是 private 属性,在类的内部和外部不可以使用
// 1、基类中的 public 成员:在派生类中是 private 属性,在类的内部可以使用,在类的外部不可以使用
// 2、基类中的 protected 成员:在派生类中是 private 属性,在类的内部可以使用,在类的外部不可以使用
// 3、基类中的 private 成员:在派生类中是 private 属性,在类的内部和外部不可以使用