图片说明
char

char(字符,character)类型,C++ 中的基本数据结构,其值一般为 0~255 的 int。这 256 个字符对应着 256 个 ASCII 码。char 类型的数据需要用单引号 ' 括起来

const

const(常量的,constant)所修饰的对象或变量不能被改变,修饰函数时,该函数不能改变在该函数外面声明的变量也不能调用任何非const函数。在函数的声明与定义时都要加上const,放在函数参数列表的最后一个括号后。在 C++ 中,用 const 声明一个变量,意味着该变量就是一个带类型的常量,可以代替 #define,且比 #define 多一个类型信息,且它执行内链接,可放在头文件中声明;但在 C 中,其声明则必须放在源文件(即 .C 文件)中,在 C 中 const 声明一个变量,除了不能改变其值外,它仍是一具变量。

sizeof 是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小。

sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小。

使用 sizeof 的语法如下:

sizeof (data type)

整个逗号表达式的值为系列中最后一个表达式的值。

从本质上讲,逗号的作用是将一系列运算按顺序执行。

最右边的那个表达式的值将作为整个逗号表达式的值,其他表达式的值会被丢弃。

var = (count=19, incr=10, count+1); 则var=20

强制类型转换格式 (type) expression

对于 for 循环,continue 语句会导致执行条件测试和循环增量部分。对于 whiledo...while 循环,continue 语句会导致程序控制回到条件测试上。

switch只能接受整型和字符型,枚举类型

C++ 传递数组给函数

C++ 中您可以通过指定不带索引的数组名来传递一个指向数组的指针。

C++ 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。

形式参数是一个指针:

1

2

3

4

5

6

voidmyFunction(int*param)

{

.

.

.

}

方式 2

形式参数是一个已定义大小的数组:

1

2

3

4

5

6

voidmyFunction(intparam[10])

{

.

.

.

}

方式 3

形式参数是一个未定义大小的数组:

1

2

3

4

5

6

voidmyFunction(intparam[])

{

.

.

.

}

C++ 不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。

成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义。在类定义中定义的成员函数把函数声明为内联的,即便没有使用 inline 标识符

  • 1.private 成员只能被本类成员(类内)和友元访问,不能被派生类访问;
  • 2.protected 成员可以被派生类访问。

使用初始化列表初始化

假设有一个类 C,具有多个字段 X、Y、Z 等需要进行初始化,同理地,您可以使用上面的语法,只需要在不同的字段使用逗号进行分隔,如下所示:

1

2

3

4

C::C(doublea,doubleb,doublec): X(a), Y(b), Z(c)

{

....

}

析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:

  • 通过使用另一个同类型的对象来初始化新创建的对象。
  • 复制对象把它作为参数传递给函数。
  • 复制对象,并从函数返回这个对象。

格式classname (constclassname &obj) {

// 构造函数的主体

}

类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。

友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。

友元不是类的成员,不受类的声明区域public、private和protected的影响

友元函数不是类的成员函数,所以友元函数的实现与普通函数一样。在实现时不用“::”指示属于哪个类,只有成员函数才使用“::”作用域符号。

友元函数不能直接访问类的成员,只能访问对象成员

可以把类A的成员函数设置为类B的友元函数,则类A可以访问类B

include

using namespace std;
class B;
class A
{
private:
int a;
public:
A(int a1) :a(a1) {};
void out(B &bb);
int aaa() {
cout << a;
return 0;
}
};

class B
{
private:
    int b;
public:
    B() { b = 20; };
    friend void A::out(B &bb);
};

void A::out(B &bb)
{
    cout << "Aname" << a << endl;
    cout << "Bname" << bb.b << endl;
}

int main()
{
A aa=A(10);
B bb = B();
aa.aaa();
aa.out(bb);
}

友元类
calss A
{
......

void out(B &bb);
}
class B
{
friend class A
}
则A可以访问B的所有成员//除了类成员

在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。

静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化,

static int objectCount;
int Box::objectCount = 0;

静态成员函数与普通成员函数的区别:

    静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。
    普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针。 

图片说明

运算符重载疑难知识点总结

输入输出不能被重载为成员函数!!!
从运算符角度来看,输出通过输出运算符“<<”来完成的,输出运算符“<<” 也称插入运算符,它是一个双目运算符,有两个操作数,左操作数为ostream类的一个对象(如cout),右操作数为一个系统预定义类型的常量或变量。例如
cout<<"Thisis a string.\n";
完成的功能为写字符串“This is a string. ”到流对象cout, cout为标准输出流,通常为屏幕。

例子:
friend ostream &operator<<( ostream &output,
const Distance &D )
{
output << "F : " << D.feet << " I : " << D.inches;
return output;
}

  friend istream &operator>>( istream  &input, Distance &D )
  {
     input >> D.feet >> D.inches;
     return input;           
  }