C++杂分析

class word{
public:
    word(){cout<<"word constructure \n";}
    word(int i){cout<<"word 1 constructure \n";}
};

class Text{
public:
    word w;
    Text():w(1)
    {cout<<"text constructure \n";}
};

int main()
{
 Text t;
}

1.自己定义的类,他自己可以隐式初始化,调用她自己的默认够着函数,但是根据实验,好像只能调用默认够着函数

2.初始化列表和成员函数的构造一共值初始化一次,如果有列表,他自己就不构造了

3.初始化列表中的元素和成员的初始化,在构造函数之前运行

问题:const static 继承 virtual 特殊成员函数 这一堆关键词混合使用的时候会发生什么情况,这个需要弄明白

静态成员的使用

#include<iostream>
#include<vector>
using namespace std;

class Text{
public:
    static const int a = 1; ///static 数据成员独立与该类存在
    ///static int b = 1; ///静态成员也不能这么初始化变量
    static int b;
    static vector<int> d ;///估计这次他就没有办法自己初始化了
    static void f1(){cout<<"f1"<<endl;} ////成员函数没有this形参,他可以直接访问所属的类的static成员,不能使用非静态的
    static void f2(){b=2;cout<<b<<endl;}
    static void f4(){b++;cout<<b<<endl;}
    Text(){ f4();}
    ///void f3(){b=3;cout<<b<<endl;}非静态函数,无法调用
    //Text():a(2),b(2){} ///C++规定const静态类成员可以直接初始化,其他非const的静态类成员需要在类声明以外初始化
};

///文章中解释说派生类也可以共享静态成员b,一会要试试
///静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。普通数据成员的只能声明为 所属类类型的 指针或引用。举例如下
///静态成员函数不可以调用类的非静态成员。因为静态成员函数不含this指针
///静态成员函数不可以同时声明为 virtual、const、volatile函数。举例如下: 

class Paper:public Text{

};

int Text::b = 0;
//int Text::f1(){cout<<"f1"<<endl;}

 int main()
{
    Text::f1();///可以直接调用
    Paper::f1();///继承后也可以使用
    Paper::f2();///静态成员函数可以调用静态变量
    ///Paper::f3();非静态函数,无法调用
    Text* t = new Text[5];///可以实现计数的功能
 }

 

posted on 2014-05-20 14:22  berkeleysong  阅读(133)  评论(0编辑  收藏  举报

导航