小工具知识网

当前位置: 首页 > 行业知识 > C++:类与对象(1)

行业知识

C++:类与对象(1)

2026-10-27 14:01:17 来源:互联网转载

��                                                    创作不易,谢谢支持!

一、面向过程和面向对象 

1、C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。

如我们要实现洗衣服:

 2、而C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

      面向对象相比面向过程来说,可扩展性更强,维护起来也更容易,可能需要我们在以后的学习中才能慢慢体会!

二、类的引入

2.1 C++将结构体升级成了类

1、C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。

2、以前struct的自定义类型要定义一个变量的时候要加struct,但是现在不需要了

3、C++中更喜欢用class来代替struct

2.2 类的定义

class className{// 类体:由成员函数和成员变量组成}; // 一定要注意后面的分号

        class为定义类的关键字,ClassName为类的名字,{ }中为类的主体,注意类定义结束时后面分号不能省略。

       类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数

类的两种定义方式:

1、声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

2、类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::

 

 一般我们都使用第二种

2.3 成员变量命名建议

我们看看这个函数,是不是很僵硬?

class Date{public:void Init(int year){// 这里的year到底是成员变量,还是函数形参?year = year;}private:int year;};

1、我们没有办法很好的区分哪个是成员变量,哪个是函数形参。 

2、由于局部变量和成员变量同名,根据局部优先的原则,前面的year肯定是局部变量,我们对他初始化就没有意义了

建议设置成员变量的时候要加点标志,比如_

class Date{public:void Init(int year){_year = year;}private:int _year;};// 或者这样class Date{public:void Init(int year){mYear = year;}private:int mYear;};

 其他方式也可以的,主要看要求。一般都是加个前缀或者后缀标识区分就行。

三、类的访问限定符

C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。

 【访问限定符说明】

1. public修饰的成员在类外可以直接被访问

2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)

3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止

4. 如果后面没有访问限定符,作用域就到 } 即类结束。

5. class的默认访问权限为private,struct为public(因为struct要兼容C)

注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

 面试题:

问题:C++中struct和class的区别是什么?

解答:C++需要兼容C语言,所以C++中struct可以当成结构体使用。另外C++中struct还可以用来

定义类。和class定义类是一样的,区别是struct定义的类默认访问权限是public,class定义的类

默认访问权限是private。在继承和模板参数列表位置,struct和class也有区别。

四、类的作用域

      类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 ::作用域操作符指明成员属于哪个类域。

class Person{public:void PrintPersonInfo();private:char _name[20];char _gender[3];int _age;};// 这里需要指定PrintPersonInfo是属于Person这个类域void Person::PrintPersonInfo(){cout 

上一篇:注册表恢复秘籍,系统问题轻松解决!

下一篇:【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)