zoukankan      html  css  js  c++  java
  • C++ Primer Plus读书笔记03

    2012-02-24

    1、 结构体的默认访问权限是public,类是private

    ∴ class myClass{

    void setValue(int value);}            //不声明,则为private权限

    2、 类声明于myclass.h中,类实现于myclass.cpp中(include”myclass.h”)

    void myclass::setValue(int value){…}

    3、 快速string ,double转换

    #include<sstream>

    string doubleToString(double value)

    {ostringstream ostr;      ostr<<value;  return ostr.str()           }

    double stringToDouble(string instring)

    {double temp;              istringstream  istr(instring);      istr>>temp;         return temp;}

    4、 this指针

    (1)  this.value=value;

    (2)  通过this可以从对象的方法中调用一个函数或方法,此函数的参数为对象指针

    eg. void printall(myclass *p){…;}

    若在myclass类的一个方法中调用printall,可用printall(this)

    5、创建对象

    创建对象

    无构造函数时

    有构造函数时

    在栈上

    myclass test;

    test.setValue(6);

    若包含构造函数,只可在初始化时创建

    myclass test(2)//唯一正确

    在堆上

    myclass *temp=new myclass();

    test->setValue(6);

    delete test;

    myclass *test;

    test=new myclass(2);

    6、初始化列表允许在创建数据成员的同时完成初始化

    myclass::myclass():mValue(10),mString(“”)//构造函数处初始化

    {

    }//数据成员按照类定义的顺序初始化,而非在本处的顺序,另外,const数据成员、引用数据成员、没有默认构造函数的对象数据成员必须在此处初始化

    7      c++中函数默认为按值传递,所以函数参数只是变量的一个副本,而不是变量本身

    例如test.setString(name);

    void myclass::setString(string input){…}//会调用input的构造函数并撤销input,而name一直未变

    ∴按const引用传递可以有效提高效率,避免创造副本及调用构造、析构函数

    8、

    如果定义了

    可以创建

    无构造函数

    myclass a;   myclass b(a);

    仅一个0参构造函数

    myclass a;   myclass b(a);

    仅一个复制构造函数

    不能创建对象

    仅一个单参或多参构造函数

    myclass a(5);  myclass b(a);

    1个0参,1个单参或多参

    myclass a;  myclass b(5);  myclass c(b);

     

    9、 栈中的对象按照声明的逆序撤销(一个代码块内),堆中的对象不会自动撤销,须用delete调用析构函数

    10、         复制只有初始化时才出现,否则叫赋值

    myclass test2=test1;    //复制,调用复制构造函数

    myclass test3;

    test3=test;      //赋值

     

    myclass::myclass(myclass test2):value(myclass2.value){}

    与myclass::myclass(myclass test2)

    {value=test2.value;}区别

    前者是复制,后者是赋值;在初始化列表中不包含某数据成员时,编译器对其完成默认初始化。所以const型只可用前者,因为初始化后不可更改。

    11、         c++中二维数组arr[m][n]

    int **arr;

    arr= new int *[m];

    for(i=0;i<m;i++)     arr[m]=new int [n];

    12、         只要类会动态分配内存,就要编写析构函数、复制构造函数和赋值运算符。默认的复制构造函数和赋值运算符都是浅复制,会出问题

     

  • 相关阅读:
    layui 参照赋值的两种方式
    c笔记
    Linux操作系统笔记
    make笔记
    Gcc如何知道文件类型。
    #include <xxx.h>和#include "xxx.h"的区别
    GCC编译流程
    c++ Socket客户端和服务端示例版本三(多线程版本)
    c++ Socket客户端和服务端示例版本二
    c++ Socket客户端和服务端示例版本一
  • 原文地址:https://www.cnblogs.com/yangtianxing/p/2435010.html
Copyright © 2011-2022 走看看