为什么string是变量
答:string创建的是变量,所谓的字符串常量就是普通的字符串(又称字符串字面值),书中写到过,
一定要记住
藏得比较深的&用法
答:在进行输出的时候如果用到&typename,则这个地址调出来到流输出时默认使用其指向对应typename(类型)的指针
using 名称空间::需要调用名称和 名称空间::需要调用名称 的区别在于前者是声明,一次声明,永久有效;后者是一次性的,只能在那一行起效。
使用new运算符得到的是指针,所以其值只能赋给指向对应类型的指针
声明的不同对象进行调用函数所调用的函数都是公用同一个的
构造函数并不是无需多余的函数体直接使成员数据初始化,应该如下编译(构造函数在类对象声明的时候就会自动调用)
class boff
{
std::string ni;
int ta;
char ha;
void siyoulei();
public:
boff(const std::string& ni_daiti, int da = 0, char za = 0);
void usediaoyong();
};
boff::boff(const std::string& ni_daiti, int da, char za)
{
std::cout << "daioyong";
ni = ni_daiti;
ta = da;
ha = za;
}
void boff::usediaoyong()
{
std::cout << ni;
std::cout << ta;
std::cout << ha;
}
void boff::siyoulei()
{
}
int main()
{
boff chad = boff("cccccc", 5, '6');
chad.usediaoyong();
}
析构函数没有参数,所以原型必须为~类名( );
可以隐式调用构造函数,比如说类名 对象名{初始化};
const成员函数,例子:void show( ) const 其作用是保证函数不会修改调用对象;
this是指针,指向对象的地址,即使用*this可以当作对象的别名
作用域为类的枚举 例子:enum class 名称{ };(作用在于防止不同的枚举定义存在同个名字的枚举量而冲突)
使用结构函数时,即初始化对象
隐式调用构造函数的方式 例子:Stock garment("furry",50,2.5); 其与显式:Stock garment=Stock("furry",50,2.5); 等价
有两个既熟悉又陌生的运算符 ->* 和 .*
友元函数的声明应在类内声明
!!!!!!友元函数访问私有成员变量,但是不能直接在定义友元函数时调用私有成员变量,只能通过引用类对象的成员参数方式调用
例子:
#include <iostream>
using std::ostream;
class CFriendClass
{
public:
CFriendClass();
~CFriendClass();
friend int getValue(CFriendClass &friendObject);
friend ostream & operator<<(ostream &os, const CFriendClass &friendObject);
private:
int value;
};
using std::cout;
using std::endl;
CFriendClass::CFriendClass() :value(66)
{
}
int getValue(CFriendClass &friendObject)
{
//友元函数访问私有成员变量,但是不能直接在定义友元函数时调用私有成员变量,只能通过引用类对象的成员参数方式调用
cout << "getValue value==" << friendObject.value<<endl;
return friendObject.value;
}
ostream & operator<<(ostream &os, const CFriendClass &friendObject)
{
//友元函数访问私有成员变量,但是不能直接在定义友元函数时调用私有成员变量,只能通过引用类对象的成员参数方式调用
os << "operator friendObject.value==" << friendObject.value << endl;
return os;
}
CFriendClass::~CFriendClass()
{
}