C++补习 局部变量,引用,构造函数后冒号

 遇到以下写法,冒号后面是对变量赋值

class A
{
  int a;
  int b;
public: A( int aa, int bb ):a(aa),b(bb) { } }
等价于:
A( int aa, int bb )
{
a=aa;
b=bb;
}

 

 

代码位置:

#include <iostream>
using namespace std;
class A
{
public:
        A(int msg){
                this->msg = msg;
                cout<<"create A\n";
        }

        ~A(){
                cout<<"destroy A\n";
        }

        int msg;
};
void swap(A& a, A& b) {
        A temp = a;
        a = b;
        b = temp;
}

int main()
{
        A a(1);
        A b(2);

        std::cout<<"a="<<a.msg<<"b="<<b.msg;
        swap(a, b);
        std::cout<<"a="<<a.msg<<"b="<<b.msg;
        std::cout<<"hellow world";
        //a会被销毁吗?
        return 0;
}

 

1 局部变量创建

  直接在作用域内A a(对应无参数构造函数)以及A a(1) (带参数构造函数)在栈上创建对象

 

2 引用的问题

  c的函数如果不带引用是按照值传递的!如下函数

void swap(A* a, A* b) {
        A* temp = a;
        a = b;
        b = temp;
}

  这样写交换对象是没用的。

  因为指针是值传递的,离开了swap函数一切照旧

  

 

posted @ 2016-10-08 17:45  明午云  阅读(625)  评论(0编辑  收藏  举报