this指针指向对象本身, 如果在对象函数内要返回对象本身 就需要解引用 吧对象返回回去 不然返回的是指针本身。
return *this;
对象数组:
跟普通的数组一个样 就是要注意 如果没有显示初始化的话 则调用默认构造函数来初始化数组中的每个对象
如果有显示调用构造函数 则编译器会先调用默认构造函数初始化 然后在新建临时对象(用显示调用的构造函数来初始化),然后赋值给数组。 这样就会调用到临时对象的析构函数。
对象数组可以对每个对象元素单独使用不同的构造函数。
可以值部分显示初始化,其余的对象元素 编译器会调用默认构造函数进行初始化。 所以 如果要用对象数组。name所涉及的类中必须要有默认构造函数。
对象的成员运算符可以用., ->, :: 其中指针的话就用->
对于作用域为类的常量 不能直接在类声明中声明const int a = 12;
有两个方法
1. 枚举
enum {A = 12};
int a[A]
2. 使用静态变量修饰符
static const A = 12;
关于用枚举来定义类作用域的常量 。如果碰到不同的枚举中元素名字相同的话 会出现错误
解决办法是 添加class关键字 也可以使用struct 这样就可以了。

枚举元素默认是int型 但是有时候在使用的时候无法做隐式转换 这时候可以用显示转换将它转换成Int型
int frod = int(t_shirt::Small);
在C++11中 可以指定枚举底层的数据类型, 比如short:
enum class :short pizza {Small, Medium, Large, XLarge};
抽象数据类型:
尽量不涉及到语言的具体类型和特性。这样通用性更强
例子:
stack.h:
#ifndef STACK_H_
#define STACK_H_
typedef unsigned long Item;
class Stack
{
private:
enum {MAX = 10};
Item items[MAX];
int top;
public:
Stack();
bool isempty() const;
bool isfull() const;
bool push(const Item & item);
bool pop(Item & item);
};
#endif
stack.cpp
#include "stack.h"
Stack::Stack()
{
top = 0;
}
bool Stack::isempty() const
{
return top == 0;
}
bool Stack::isfull() const
{
return top == MAX;
}
bool Stack::push(const Item& item)
{
if (top < MAX)
{
items[top++] = item;
return true;
}
else
return false;
}
bool Stack::pop(Item & item)
{
if (top > 0)
{
item = items[--top];
return true;
}
else
return false;
}
stacker.cpp
#include <iostream>
#include <cctype>
#include "stack.h"
int main()
{
using namespace std;
Stack st;
char ch;
unsigned long po;
cout << "Please enter A to add a purchase order, \n"
<< "P to process a PO, or Q to quit.\n";
while (cin >> ch && toupper(ch) != 'Q')
{
while (cin.get() != '\n')
continue;
if (!isalpha(ch))
{
cout << '\a';
continue;
}
switch(ch)
{
case 'A':
case 'a': cout << "Enter a PO number to add: ";
cin >> po;
if (st.isfull())
cout << "stack already full\n";
else
st.push(po);
break;
case 'p':
case 'P': if (st.isempty())
cout << "stack already empty\n";
else {
st.pop(po);
cout << "PO #" << po << " popped\n";
}
break;
}
cout << "Please enter A to add a purchase order,\n"
<< "P to process a PO, or Q to quit.\n";
}
cout << "Bye\n";
return 0;
}
第十章总结



被折叠的 条评论
为什么被折叠?



