`
隐形的翅膀
  • 浏览: 482529 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C++基础知识

阅读更多
1. typedef

自定义数据类型,就是给已有数据类型起一个别名,方便自己的阅读或者其它目的

typedef double area;
typedef int nature;

用新类型定义变量

area a;
nature b;

2. 枚举数据类型

enum game_result {win,lost,tie,cancel}

3. 结构体
结构体变量生命可以在结构体类型声明之后,二者可以同时进行
占内存大小可以用sizeof运算求出 sizeof(类型名或者变量名)
结构体变量可直接设置初值
struct student
{
int age;
char name[20];
}stu={20,"mike"}

stu.age

4. 有时需要把几个不同类型的变量共同使用一组内存单元,联合体

5. 函数值传递,void Swap(int a, int b);
6. 函数引用传递  void Swap(int& a,int& b)

7. 内联函数
   函数调用会降低程序的执行效率,内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用语句处,节省开销
   内联函数体内不能有FOR循环和SWITCH语句
   内联函数的定义必须出现在第一次被调用之前
   inline double CalArea(int a);
   隐式说明: 函数实现在.h中直接实现,显示说明,加inline关键字

   .h
   void ShowTime()
   {cout << this is a test<<endl;}

8. 带默认形参值的函数
   int add(int x=5,int y=6)
   add(),
   默认形参值必须按从右向左的顺序定义
   int add(int x,int y=5,int z=6); 正确
   int add(int x=1,int y=5,int z); 错误

   在相同的作用域内,默认行参值的说明应保持唯一
   int add(int x=1,int y=2);
   void main(void)
   {
      int add(int x=3,int y=4);
      add();
   }

9. 函数重载
10, 函数模板

11. 拷贝构造函数
    其作用是使用一个已经存在的对象去初始化一个新的对象
    class Point
    {
      public:
        Point(Point &p);
    }
    Point::Point(point &p)
    {
X=p.X;
        Y=P.Y;
    }


13. 类中的成员函数可以带默认值

14. 类中的内联成员函数

15. 组合类成员对象的初始化,在创建对象既要对本类的基本数据进行数据化,也要对内嵌对象的基本数据成员初始化
    类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表)
    初始化顺序
    1。 按声明的顺序,对内嵌对象进行初始化
    2.  执行本类构造函数的函数体
    Circle::Circle(float r):radius(r){}

16. c++类先声明再使用,如果两个类相互引用,就必须使用前向引用声明
    class B;
    class A
    { public:
              void f(B b);
    }

17 如果类中没有构造函数,编译时会生成默认构造函数
   如果自定义构造函数有参数,则必须给出初始值

18. 类模板

19.  作用域
     a. 函数原型作用域:仅在函数体内有效
     b. 块作用域: 从声明处开始,到块的大括号结束为止
     c. 类作用域:在类中有效
     d. 文件作用域: 开始于声明点, 结束于文件末尾
      inti;
      void main(){...}

20. 可见性
     文件作用域>类作用域>块作用域

      a. 没有相互包含的作用域中,声明同名标志符互不影响
      b. 具有包含关系的作用域声明同名标志符,则外层标志符在内层不可见


21  静态生存周期:对象的生存期与程序的运行周期相同
    动态生存周期:动态生存周期诞生于声明点,终止于作用域结束时

22. 静态局部变量,具有全局寿命,局部可见,只在第一次进入函数时初始化
    void main(void)
    {
       static int a;
       void other(void) 声明函数原型,为调用做准备,并没有真正调用
       other(); a=4;
       ....
       other(); a=6;
    }
    void other(void)
    {
      static int a=2;
      a=a+2;
    }
23  类属性,静态数据成员对于任何对象实例,它的值时相同的,是对象的共同特征
    访问: 类名::标识符 即使成员为私有静态成员,也可以访问
    对于普通函数成员的调用,必须通过对象名
    静态成员函数可以直接访问该类的静态数据和静态函数成员,而访问非静态数据成员,必须通过传递参数来访问

    static void A::f(A a){cout<<a.x;}
    对象名.静态成员函数 == 类名::静态成员函数

24. 友元函数可以通过对象名类访问类的私有和保护成员
    class Point
    {
      public:
           friend float fDist(Point &a,Point &b);
      private:
           int X,Y;
     }
     友元的实现在Point类外,在正常情况已经不能访问类的私有和保护成员,但声明为友元函数后可以
     float Fdist(Point &p1,Point &p2)
     {
          cout<<p1.X;
          cout<<p2,Y.
     }

25. 友元类: 若A类为B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员
    友元关系部能传递,B 为 A 的, C为B的,但C和A之间没有关系。
     友元关系式单向,A 为 B, 但B不一定为A

    class B
    {
        friend class A;
    }

26. 常引用所引用的对象不能被更新
    常引用声明

    const 类型说明符 & 引用名

    void display(const double& r)
    int main()
    {
       double d(9.5);
       diplay(d);
       return 0;
    }
    void display(const double& r)
    {
      常引用做形参,在函数中不能跟新R所引用的对象,对应的实参不会被破坏
    }

27. 常对象
    声明:
    类名 const 对象名
    常对象必须进行初始化,而且不能被更新.
    常对象对象只能调用其常成员函数,而不能调用其它成员函数
    A const a(3,4);

28. 常成员函数
    函数声明后 加 const
    类名 函数名(形参) const;
    class B{ pulic: void pirnt() const;}
    常成员函数不能更新对象的数据成员,也不能访问非常成员函数

29. 常数据成员
    const int a;
    static const int t;
    任何函数都不能跟新常数据成员,只能通过初始化列表构造函数类获得初值
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics