C++:类和对象

1、类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例,拥有类的成员变量和成员函数。

2、类本身不占用内存空间,而对象可以说是类这种数据类型的一个变量,占用内存空间。class 是定义类的关键字,类名的首字母一般大写,类的定义最后有一个封号“;”。

3、在创建类的对象时,class关键字可要可不要(通常省略),类也可以创建数组(如 Student stu[100], 它又100个元素,每个元素都是 Student 类型的对象)。

4、两种创建对象的方式:

1)在栈上创建;

2)在堆上创建,必须使用一个指针指向它,最后不用时在 delete。

5、成员变量和成员函数:

在定义类的时候不能对成员变量进行赋值。成员函数与一般函数的区别:成员函数的作用范围由类来决定;而普通函数是独立的,作用范围是全局的,或位于某个命名空间内。

成员函数可以在类中直接定义,也可以先在类中声明,在类外定义。但在定义时得加类名和“::”,表明它是哪个类中的。

6、 inline 成员函数:

在类中定义的函数会自动成为内联函数,在类外不会。如果希望定义在类外部的函数是内联函数,可以在定义时加 inline 关键字(如:

inline void Student::say() {} )。这种在类外定义inline 函数的方式,必须将类的定义和成员函数的定义都放在同一个头文件中(或同一个源文件中),否则编译时无法进行嵌入(将函数代码嵌入到函数调用处)。

注意:内联函数一般将函数定义在类中。

7、private私有成员变量和成员函数只能在类的内部使用,在外部无效。一 般成员变量都以 m_ 开头。在实际开发中,通常将类的定义放在头文件中,成员函数的定义放在源文件中。

8、构造函数:构造函数没有返回值,想要调用构造函数,就得在创建对象的同时传递传递实参。构造函数只能给成员变量赋值一次。

9、构造函数的重载

构造函数的调用是强制性的,一旦类中定义了构造函数,那么在创建对象时就一定要调用,不调用是错误的。如果有多个重载的构造函数,那么创建对象时提供的实参必须和其中的一个构造函数匹配;创建对象时只有一个构造函数会被调用。

10、默认的构造函数

如果用户没有定义构造函数,那么编译器会自动生成一个默认的构造函数。如:Student () {}

11、一个类必须有构造函数,要么用户自己定义,要么编译器自动生成。一旦用户自己定义了构造函数,编译器将不再自动生成。调用没有参数的构造函数也可以省略括号。

12、构造函数的一项重要功能是对成员变量进行初始化,为此,可以在构造函数的函数体中对成员变量一 一赋值,也可以采用参数初始化表。参数初始化表是唯一初始化 const 成员变量的方法。

13、析构函数:

销毁对象时,系统会调用析构函数来进行清理,例如释放分配的内存,关闭打开的文件。析构函数没有参数,不能被重载,因此一个类只能有一个析构函数。若用户没有定义,编译器会自动生成一个。

14、this:

this是 C++中的关键字,也是一个const指针(因此它的值不能被修改),它指向当前对象,通过它可以访问当前对象的所有成员。

例如:void Student::setname(char *name)

     {

this->name = name;

     }

this只能在成员函数内部使用,只有在对象被创建以后才会给 this 赋值(因此不能在 static 成员函数中使用),并且这个赋值过程是编译器自动完成的。

15、static 静态成员变量:

static 静态成员变量属于类,不属于某个对象。即使创建多个对象,也只为它分配一份内存(在全局数据区分配内存),所有对象共享该内存。

ststic 成员变量必须(在类声明的外部)初始化。例如:int Student::m_total = 0;

注意:static 成员变量的内存既不是在声明类时分配,也不是在创建对象时分配,而是在(类外)初始化时分配,直到程序结束时才释放内存,不随对象的销毁而释放。反过来说,没有在类外初始化的 static 成员变量不能使用。

16、static 成员变量的访问方式:

1)通过对象来访问:Studentstu("小明", 15, 92.5f);

stu.m_total = 20;

Student *pstu = new Student("李华", 16, 89.5f);

pstu->m_total = 20;

2)通过类来访问:Student::m_total= 10;

注意:static 成员变量不占用对象的内存,而是在所有对象之外开辟内存。

17、static 静态成员函数

普通成员函数可以访问所有成员(包括成员变量和成员函数),静态成员函数只能访问静态成员。

编译器在编译一个普通成员函数时,会隐士地增加一个形参 this,并把当前对象的地址赋值给 this ,所以普通成员函数只能在创建对象后通过对象来调用,因为它需要当前对象的地址。而静态成员函数可以通过类来直接调用,编译器不会为它增加形参 this ,它不需要当前对象的地址,所以不管有没有创建对象,都可以调用静态成员函数。

静态成员函数可以通过类和对象来调用。

18、const:

const 成员函数(常成员函数)可以使用类中的所有成员变量,但是不能修改它们的值。它必须在声明个定义处同时加上 const 关键字。

const 也可以来修饰对象,称为常对象,常对象只能调用类的const成员。

19、友元函数

友元函数可以访问当前类中的所有成员,包括 public, protected, private属性的。

友元函数可以是不属于任何类的非成员函数(全局函数),也可以是其他类的成员函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值