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函数一切照旧

  

时间: 2024-10-12 07:56:10

C++补习 局部变量,引用,构造函数后冒号的相关文章

C++ 构造函数后加冒号

其实冒号后的内容是初始化成员列表,一般有三种情况: 1.对含有对象成员的对象进行初始化,例如, 类line有两个私有对象成员startpoint.endpoint,line的构造函数写成: line(int sx,int sy,int ex,int ey):startpoint(sx,sy),endpoint(ex,ey){……} 初始化时按照类定义中对象成员的顺序分别调用各自对象的构造函数,再执行自己的构造函数 2.对于不含对象成员的对象,初始化时也可以套用上面的格式,例如, 类rectang

引用添加后一生成就报错,提示引用不存在

这两天写一个Winform程序,代码什么的都是正确的,但是从是报引用不存在,然后移除引用再添加就正确了,一"重新生成"后又继续错误,好纠结的,以前就没遇到过这样的.百度不出个结果,今天突然想到什么版本可能不对,就打开程序的属性一看,果然,框架版本不对,上图: 明了了吧.以此为戒!

JS 内存堆栈原理(注销引用对象后带来的问题)

var a = { name: 123}; var b = a; a.name; 123 b.name; 123 a.name = 'wolf'; "wolf" b.name "wolf" a.name = null; //注销此引用对象的内存,引用此引用对象的对象,失去对引用对象的引用,获得属于自己的引用对象副本; null b.name null a = null; null b Object {name: null}

构造函数后面的base()

先执行父类的对应的构造函数,再执行当前的构造函数. 关于子类对象的构造函数和父类构造函数的执行顺序 以下内容转自:http://blog.csdn.net/todototry/article/details/4941484 原则: 1.任何类的构造函数,一定要是public的,才能派生子类 class Base        {            private int i;            public Base(int i)             {               

VS2013 Web项目添加引用项目后,引用上有黄色的感叹号小图标

RT,重新生成还是不行,然后重新打开VS,VS2013,还是不行. 最后,右键引用-属性-已解析 False. 为什么会未解析呢.终于找到问题根源了. 当前项目.net 4.0版,而引用的项目.net4.5版本. 解次方法: 当前项目右键属性-生成事件 .NET Framework 4.5-保存

ios下引用MUI后input不能输入,Android端正常

原因是mui框架的有个css样式 *{ -webkit-user-select: none; } 其作用是禁掉用户可以选中页面中的内容. 添加以下style样式即可 input{ -webkit-user-select: auto; } 原文地址:https://www.cnblogs.com/stubborn-donkey/p/8509576.html

C++文件头,命名空间,new和delete,内联函数,引用,函数重载,构造函数和析构函数,深拷贝和浅拷贝,explict,this指针

 目  录 1       开始学习C++.............................................................................................................. 4 1.1       C++的头文件.................................................................................................

理解 Java 方法引用(方法引用符:“双冒号 :: ”)

方法引用 在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿什么参数做什么操作.那么考虑一种情况:如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案,那是否还有必要再写重复逻辑? 冗余的Lambda场景 来看一个简单的函数式接口以应用Lambda表达式: @FunctionalInterface public interface Printable { /** * 接收一个字符串参数,打印显示它 * @param str 字符串 */ public abs

009-jdk1.8版本新特性一-展方法,Lambda表达式,函数式接口、方法引用构造引用

一.JDK1.8 名称:Spider(蜘蛛) 发布日期:2014-03-18 新特性: 1.1.扩展方法[接口的默认方法] Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法. 在Java中只有单继承,如果要让一个类赋予新的特性,通常是使用接口来实现,在C++中支持多继承,允许一个子类同时具有多个父类的接口与功能,在其他语言中,让一个类同时具有其他的可复用代码的方法叫做mixin.新的Java 8 的这个特新在编译器实现的角度上来说更