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 语句会导致执行条件测试和循环增量部分。对于 while 和 do...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; }