细节总结
1. 什么是类,如何写一个类(class)。
类是具有相同特性和行为的对象组成的集合,在计算机语言中类就是指一个数据类型。
1、使用class和struct的唯一区别是:使用class定义的类在没有被强制限定的话,其成员时私有的(private),既不能被外部调用。使用struct的话,其成员是公共的(public),可以被外部调用。
2、每个类定义了唯一的类型,即使两个类的成员完全一样,只要类名不同,它们也是不同类型。
3、类体中的数据描述的是类的特征(属性),方法是类中定义的函数,描述类的行为。类型成员用于在类的作用域中指定类型的别名。
如何写一个类;
1.分析问题有几个事物,再分析他们属于几类,有几类就写几个类。
2.对每一个类都分析有几个相关的属性,就定义几个基本变量。
3.一般来说每个类都应有一个构造函数,用于初始化类的私有变量,要初始化几个就有几个参数。
4.写成员函数,注意如果输入量本身就是私有变量,则不需要参数,如果输入变量是外部数据,则需要参数。要做几个事,就写几个成员函数。
2. 类要怎么声明。
class 类型名 //类头
{
private: //类体,内容是类的成员表,包括数据和函数
私有的数据和成员函数;
public:
公用的数据和成员函数;
}; //结束
-
头文件(.h)、源文件(.cpp)怎么写。
== 以.h为扩展名的辅助性文件,也称为头文件。
== 以.c为扩展名的基本程序文件,也称为源代码文件;
在一个程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。
C+ +语言支持分别编译。一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对独立的,在编 译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次链接(link)就行可。
头文件包含;
标准库头文件和其他头文件的预处理命令;
各种公用的宏定义;
各种公共的类型定义;
结构、联合、枚举的声明;
函数原型的声明;
变量的外部说明。 -
什么是封装,怎么封装。
封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。在面向对象编程中,封装(encapsulation)是将对象运行所需的资源封装在程序对象中——基本上,是方法和数据。对象是“公布其接口”。
封装方法;
set方法(是保证成员变量封装性的一种重要途径)
(1)作用:提供一个方法给外界来设置自身成员值。
(2)命名规范:
<1> 方法名必须以set开头
<2>set后面必须跟上成员变量的名称,成员变量的首字母必须大写。
<3>返回值一定是void
<4>一定要接受一个参数,而且参数类型要跟成员变量类型一致。
<5>形参的名称不能跟成员变量名一致。
set方法功能:为了不想让外部直接访问成员变量而对外部提供设置成员的接口。
可以对外部提供的参数进行选择与过滤,从而避免了外部赋给成员变量非法值。
get方法:
(1)作用:返回对象内部的成员变量。
(2)命名规范:
<1>肯定有返回值,返回值类型肯定和成员变量类型一致。
<2>方法名和成员变量名一致。
<3>不需要接受任何参数。
-----封装能保证数据安全性,不让成员变量暴漏给外部,从而避免外部直接访问或直接修改成员变量。封装即隐藏内部实现细节。
-----当某个成员只允许外部访问而不允许外部修改时只提供get方法。如果只允许外部修改而不允许外部访问时只提供set方法。
封装的细节:
成员变量名的命名规则:一定要以下划线”_“开头:好处有
(1)让成员变量和get方法名称区分开
(2)可以跟局部变量区分开,一般看到以下划线开头的变量,一般都是成员变量。
5 . 什么是结构体,什么是初始化,结构体的初始化方法,赋值和初始化的区别。
结构体是一种数据形式,里面可以保存含有字符、字符串、数字等各种信息,并且分别保存起来,每一种数据类型是一种成员或者字段。
利用结构体必须掌握三个重要的技巧:
(1) 建立结构的格式或者布局。
(2) 声明遵守该布局的变量。
(3) 获取对一个结构变量的各个部件的访问
初始化就是把变量赋为默认值。
结构体的初始化方法
一、在结构体构造函数中初始化
struct Stu
{
int nNum;
bool bSex;
char szName[20];
char szEmail[100];
//构造函数初始化
Stu()
{
memset(this,0,sizeof(Stu));
}
二、继承模板类初始化
template <typename T>
class ZeroStruct
{
public:
ZeroStruct()
{
memset(this