关于C++类的基础

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或者虚函数   



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值