C++ -类和对象基础 .2

静态成员

在成员变量和成员函数前加上关键字static,称为静态成员

静态成员变量

(1)所有对象共享同一份数据

(2)在编译阶段就分配内存

(3)类内声明,类外实现

#include<iostream>
using namespace std;
class Person
{
    public:
    static int m_A; //static修饰之后的静态成员变量
};
int Person :: m_A = 100;  // 类外实现
void test()
{
   Person p1;
   cout << p1.m_A << endl;
   Persom p2;
   p2.m_A = 200;
   cout << p1.m_A << endl; // 此时的m_A 此时已经被改为两百 ,所有对象共享同一份数据 
}
int main()
{
    system("pause");
      return 0;
}

静态成员变量和静态成员函数 也是有访问权限的,在private权限下 类外不能访问 静态成员变量和静态成员函数

静态成员函数

(1)所有对象共享同一个函数

(2)静态成员函数只能调用静态成员变量

C++对象模型和this指针

在C++中,类内的成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象上。

空对象在C++中占一个字节,编译器自动分配的,为了区分每个空对象的内存地址,

每个空对象都应该有独一无二的内存地址

this指针

C++中this指针指向的是调用成员函数所属的对象;不需要定义直接使用

this指针的用途:在形参和成员变量名相同情况下,用this指针来区分;在类的非静态成员函数中返回对象本身用 return  *this;

class Person
{
    public:
    Person (int age)
{ 
         this->age = age; //this指针区分成员变量和形参
}
     Person & Personadd(Person &p)
{
         this->age += p.age;
           return *this;  //在类的非静态成员函数中 this指针返回对象本身
}
   int age;
};
void test()
{
     Person p1(10);
     Person p2(20);
     p2.Personadd(p1);
}

空指针也可以调用成员函数,但是要注意有没有用到this指针,需要加以判断保证代码的健壮性

class Person
{
   public:
     void showp()
{
     cout << "hello world" << endl;
}
      void showw()
{
     cout << m_A << endl;  //相当于 this->m_A; 但this指针指向的对象为空 所有程序会出错
}
    int m_A;
};
void test()
{
    Person *p = NULL;
    p->showp();
    p->showw();  //会出错,因为this指针为空指向
}

const修饰成员函数

常函数:成员函数后加const后我们称这个函数为常函数,常函数不能修改成员属性,成员属性在声明前加mutable后,在常函数中仍让可以修改。

常对象:在对象声明前加 const修饰; 常对象只能调用常函数

常对象不可以修改普通成员变量 可以修改加mutable声明的成员变量

友元

友元的目的:让一个函数或一个类访问另一个类的私有成员

(1)全局函数做友元

(2)友元类

(3)成员函数做友元

class Person
{
friend void test(Person &p);
   private:
    int m_A;
    int m_B;
};
void test(Person &p)
{
    cout << p.m_A << endl;
    cout << p.m_B << endl;
}

friend 关键字

C++ 运算符重载

operator + 、 operator  <<  、operator++ 、operator= 、 operator < 、operator ()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C++面向对象中的类的继承与派生是指在一个类的基础上,创建一个新的类,新的类可以继承原有类的属性和方法,并且可以添加新的属性和方法,从而实现代码的复用和扩展。 在C++中,使用关键字“class”定义一个类,使用关键字“public”、“private”、“protected”定义类的访问权限。在定义一个派生类时,使用关键字“class”后面加上派生类的名称,再使用冒号“:”后面加上基类的名称,即可实现类的继承。 派生类可以访问基类中的公有成员和保护成员,但不能访问基类中的私有成员。派生类可以重载基类中的成员函数,也可以添加新的成员函数和成员变量。 类的继承与派生是C++面向对象编程中的重要概念,可以帮助程序员更好地组织代码,提高代码的复用性和可维护性。 ### 回答2: 面向对象编程中,类的继承与派生是非常重要的概念。继承是指在一个类的定义中可以基于另一个已有的类来创建一个新的类,新类会自动拥有父类的属性和方法。派生是继承的一种特殊形式,指在已有的类的基础上产生新的子类,新的子类不仅具有父类的属性和方法,还能在此基础上增加新的属性和方法。 在面向对象编程中,继承和派生的主要作用是代码重用,减少了重复代码的编写,并且提高了代码的可维护性和可扩展性。在一个类中,如果有多个方法都具有相同的实现,那么可以将这些方法定义在一个父类中,然后在子类中通过继承来重用这些方法。这样不仅能够提高代码的复用性,还能够降低代码的维护成本。 此外,继承和派生还可以让程序员更好的组织代码,划分出不同的层次,从而更好的管理代码。可以将共性的方法和属性定义在父类中,特有的方法和属性定义在子类中,这样不仅能够提高代码的可读性,还能够更好的维护和扩展代码。 但是,在使用继承和派生时,也需要注意一些问题。首先,如果继承层次过深,会使代码变得复杂,难以维护和扩展。其次,如果子类重写了父类的方法,会导致代码逻辑难以理解。此外,如果父类中的一些方法或属性在子类中没有被使用,那么就会占用不必要的内存。 因此,在使用继承和派生时,需要根据具体的情况来考虑是否使用,不应该过度使用,从而造成代码的混乱和不必要的浪费。同时,也需要注意代码的设计和划分,保持良好的代码结构和规范。 ### 回答3: 在面向对象编程中,类的继承与派生是重要的概念。类的继承是指创建一个新类,该类继承了现有类的属性和方法。派生也是继承的一种形式,是指从一个现有类中创建一个新类,并添加或修改该类的特定属性或方法。 类的继承可以提高代码的可重用性和可维护性。当一个新类继承自一个父类时,它自动继承父类的属性和方法,这意味着开发人员可以重复使用父类的代码。如果需要修改父类的属性或方法时,不需要修改所有继承该类的子类,只需修改基类即可,这有助于提高代码的可维护性。 在类的继承中,子类可以覆盖其父类的方法,这是一种多态性的实现。当调用一个子类对象的方法时,会优先调用子类的方法,如果子类没有实现该方法,那么将会调用父类的方法。 派生则是在继承的基础上创建一个新类,该新类继承父类的特定属性和方法,并添加或修改某些内容。通过这种方式,开发人员可以为不同的应用场景创建定制的类,这可以提高应用程序的灵活性。 在类的继承和派生中,需要注意一些最佳实践。一旦一个类被继承,它的接口就不能轻易地修改。否则所有继承的类都需要相应地进行更改。此外,应避免使用多层次的继承或派生,这会导致代码过于复杂和难以理解。 综上所述,类的继承与派生是面向对象编程中的重要概念。通过继承和派生,可以提高代码的可重用性和可维护性,实现多态性以及创建定制的类。然而,在应用这些概念时,应该遵循良好的最佳实践,以确保代码的可读性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值