有关类的基础

1.使用类型别名来简化类
Example:
class A
{
public:
typedef string::size_type MyType;
private:
MyType x;
};
Tips:类型别名的定义必须出现在其使用之前,例如,下面的的代码为非法的
class A
{

private:
MyType x; //error,MyType尚未定义
public:
typedef string::size_type MyType;
};

2.this指针
class A
{
public:
A& f()
{
cout << this << endl;
cout << &x << endl;
return *this;
}
private:
int x;
};

int main ()
{
A a;
cout << &a.f() << endl; //首先调用a.f(),输出this指针的值,x地址的值,
//最后返回对象a的引用,并输出的地址的值。可见,三者的值时相同的
cout << endl;
A b;
cout << &b.f( ) << endl;
return 0;
}

从输出结果可以看出,每个对象都有各自的this指针,this指针保存的是对象的地址,
归根到底,this指针保存的是对象第一个数据成员的地址

3.类定义实际上是在两个阶段中处理:
1)首先,编译成员声明
2)只有在所有成员出现之后,才编译它们的定义本身。

4.构造函数分两个阶段执行
1)初始化阶段
2)普通的计算阶段(构造函数体重的所有语句组成)
Tips:
不管成员是否在构造函数初始化列表中显示初始化,类类型的数据成员总是在初始化阶段初始化。
Example:
class A
{
public:
A(string s)
{
str=s; //在赋值之前,str已经被初始化为空串

}
private:

string str;
};

Tips:没有默认构造函数的类类型的成员,以及const或引用类型的成员,都必须在构造函数初始化列表中进行初始化
Example:
class A
{
public:
A(int i)
{
x=i;
}
private:
int x;
};

class B
{
public:
B():a(1){} //a没有默认构造函数,必须在初始化列表中进行初始化
private:

A a;
};

5.初始化式可以使任意表达式
Example:
class A
{
public:
A(int i,int j):x(i),y(j),z(i*j){}
private:
int x;
int y;
int z;
};

6.类成员的显示初始化化
对于没有定义构造函数并且全体成员均为public的类,可以采用与初始化数组元素相同的方式初始化其成员
Example:
class A
{
public:
int x;
int y;
};
A a={1,2};

7.使其它类的成员函数成为友元
Example:
class B;
class A
{
public:
void f(B &b); //函数的定义必须在类B完全定义之后
};

class B
{
friend void A::f(B &b);
public:
B(int i):x(i){}
private:
int x;
};

void A::f(B &b)
{
cout << b.x << endl;
}

8.static 成员函数不能被声明为cosnt或者虚函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值