关闭

C++点滴

标签: 自己记录C++
70人阅读 评论(0) 收藏 举报
分类:
  1. 将“引用”作为函数返回值类型的格式、好处和需要遵守的规则?

函数格式:类型标识符(如int)&函数名(参数列表){函数体}
好处:返回的值不用创建副本。
注意事项:
1. 不能返回局部变量的引用。因为局部变量的引用在函数返回时会被销毁,使得引用指向不明,程序进入未知状态。
2. 不能返回函数内部new分配的内存的引用。被函数返回的引用只是一个临时变量,而没有被赋予一个实际变量,那么这个引用所指向的内存没法释放,会造成内存泄漏。
3. 可以返回类成员的引用,但是最好是const。因为类成员一般是封装隐藏的,不能被修改。

1.新特性
bool类型
bool flag=0;

if(flag)
{
    //to do
}
else
{
    //to do
}

2.随用随定义变量
3.C++的I/O方式
cout的语法形式
cout>>x>>endl;(endl相当于C语言中的/n)
cout<<”x+y=”<

namespace A         namespace B
{                   {
    int x=0;                int x=2;
    void fun1();            void fun1();
    void fun2();            void fun3();
}                   }

cout<

int *p=new int [1000];
if(NULL==p)
{
//内存分配失败
}
delete p;           //释放内存
p=NULL;     //将指针p置空

类(类名最好能看出类的功能)

class Dog               //类名(关键字)
{
char name[20];      //数据成员(属性)
int age;
int type;

void shout();           //成员函数(方法)
void run();
};

目的不同抽象出的信息不同。
访问限定符:public,private,protected
class TV
{
public:
char name[20]; //希望暴露出来的
int type;

void changeVol();
void power();
private:
电阻调节; //希望隐藏的
像素配色;
};
对象:具体事物
对象实例化
从栈实例化对象:(引用上面的类TV)
int main()
{
TV tv;
TV tv[20];
return 0;
}
从堆实例化对象:
int main()
{
TV *p=new TV();
TV *q=new TV[20];
//to do something
delete p;
delete []q;
return 0;
}
对象成员访问
单一:
tv.type=0; tv.changeVol(); (栈访问)
p->type=0; p->changeVol(); (堆访问)
数组:
int main()
{
TV *q=new TV[20];
for(i=0;i<20;i++)
{
q[i]->type=0;
q[i]->changeVol();
}
delete []q;
q=NULL;
return 0;
}
操作频繁且复杂的数据类型: char 数组(类型)
string类型

#include<iostream>
#include<string>
using namespace std;
int main()
{
string name=”Zhang san”;
string hobby(“football”);       //将football初始化给hobby:
cout<<name<<hobby<<endl;
return 0;
}
string s1;          //s1为空串
string s2(“abc”)    //s2被初始化为abc
string s3(s2)           //s3初始化为s2的一个副本
string s4(n,’c’)        //s4初始化为n个c

string s=”hello”+”world”;       //这种表达式错误,字符串之间不能直接相接
string s1=”a”+s2;               //合法

封装的好处

class Student
{
public:
void set_age(_age)              //这也称为类内定义
{
if(_age>0&&_age<100)        //通过封装限制了age的设置条件
{
age=_age;
}
else
.....
}
void get_age()
{
return age;
}
private:
string name;
int age;
...
};
class Car
{
public:
get_Wheelcount()            //封装使得这个函数是只读形式
{return Wheelcount;}
private:
int Wheelcount;
};

类内定义与内联函数 类内定义的函数编译器自动定义为内联函数
类外定义
同文件类外定义:

class Car
{
public:
void run();
void stop();
void changespeed();
};

void Car::run(){…};
void Car::stop(){…};
void Car::changespeed(){…};
分文件类外定义:
编写一个头文件Car.h

class Car
{
public:
void run();
void stop();
void changespeed();
};

编写一个源文件Car.cpp

#include”Car.cpp”
void Car::run(){...};
void Car::stop(){...};
void Car::changespeed(){...};

内存分区
栈区 int x=0;int *p=NULL;
堆区 int *p=new int[20];
全局区 存储全局变量和静态变量
常量区 string str=”hello”;
代码区 存储逻辑代码的二进制
对象初始化
构造函数
特点
在对象实例化时被自动调用;构造函数与类同名;构造函数没有返回值;构造函数可以有多个重载形式;实例化对象时仅用到一个构造函数;当用户没有定义构造函数时,编译器自动生成一个构造函数。
无参构造函数

class Student
{
public:
Student()
{m_strName=”jim”;}
private:
string m_strName;
};

有参构造函数

class Student
{
public:
Student(string _name)
{m_strName=_name;}
private:
string m_strName;
};

重载构造函数

class Student
{
public:
Student()
{m_strName=”jim”;}
Student(string _name)
{m_strName=_name;}
private:
string m_strName;
};

初始化列表

class Student
{
public:
Student():m_strName(“Jim”),m_iAge(15){}
private:
m_strName;
m_iAge;
};

初始化列表的特性:初始化列表先于构造函数执行;初始化函数只能用于构造函数;初始化列表可以同时初始化多个数据成员
初始化列表的重要性

class Circle
{
public:
Circle(){m_dpi=3.14}                //错误  因为已经将m_dpi限定了,不能再赋值了
private:
const double m_dpi;
};
class Circle
{
public:
Circle():m_dpi(3.14){}              //正确
private:
const double m_dpi;
};

拷贝构造函数
定义格式:
类名(const 类名&变量名)

class Student
{
public:
Student();
{
m_strName=”Tom”;
}
Student(const Student&stu){...};
private:
string m_strName;
};

如果没有自定义拷贝构造函数,则系统会自动生成一个默认的拷贝构造函数
当采用直接初始化或者复制初始化实例化对象时,系统自动调用拷贝构造函数
拷贝构造函数不能重载
析构函数(释放资源)
定义格式:~类名()

class Student
{
public:
Student() {m_pName=new char[20];}
~Student() {delete []m_pName;}
private:
char *m_pName;
};

如果没有自定义的析构函数,则系统自动生成;
析构函数在对象销毁时自动调用;
析构函数没有返回值和参数,也不能重载
对象的生命历程
1.申请内存->2.初始化列表->3.构造函数->4.参与运算->5.析构函数->6.释放内存
对象数组

class Coordinate
{
public:
int m_iX;
int m_iY;
};
int main()
{
Coordinate coord[3];
coord[1].m_iX=3;
Coordinate *p=new Coordinate[3];
p[0].m_iX=10; p[0]->m_iX=17;
delete []p;
p=NULL;
return 0;
}

对象成员

class Coordinate
{
public:
Coordinate(int x,int y);
private:
int m_iX;
int m_iY;
};
class Line
{
public:
Line(int x1,int y1,int x2,int y2);
private:
Coordinate m_coorA;         //数据类型是Coordinate 
Coordinate m_coorB;
};

Line::Line(int x1,int y1,int x2,int y2):m_coorA(x1,y1),m_coorB(x2,y2)
{
cout<<”Line”<<endl;                         //Line的构造函数
}
int main()
{
Line *p=new Line(2345);
delete p;
p=NULL;
return 0;
}

浅拷贝

class Array
{
public:
Array()
{m_iCount=5;}
Array(const Array& arr)
{m_iCount=arr.iCount;}
private:
    int m_iCount;   
};

深拷贝

class Array
{
public:
Array()
{m_iCount=5,m_pArr=new int[m_iCount];}      
Array(const Array& arr)
{m_iCount=arr.m_iCount;
m_pArr=new int[m_iCount];
for(i=0;i<m_iCount;i++)
{m_pArr[i]=arr.m_pArr[i];}}
private:
    int m_iCount;
int *m_pArr;
};

对象指针

class Coordinate
{
Coordinate *p=new Coordinate;
p->m_iX=10;  //(*p).m_iX=10;
p->m_iY=15;  //(*p).m_iY=15;
delete p;
p=NULL;
return 0;
};
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Material Design学习之 Button(详细分析,传说中的水滴动画)

详细的分析了MaterialDesign Button的实现,之后还会有其他控件的细致实现分析供上,欢迎找错误,谢谢!
  • ddwhan0123
  • ddwhan0123
  • 2016-01-21 18:31
  • 5641

2017滴滴出行实习面试总结(测试岗,拿到offer)

一面(四十几分钟): 1 、自己设计实现一个信号量(口述思路) 2 、Linux创建进程的几种方式,之间的区别 3 、多态的实现机制 4、malloc 和 new 的区别 5、不同类的占用内...
  • ljlstart
  • ljlstart
  • 2016-04-04 23:32
  • 7250

基本动画效果(点赞,长按抖动,播放器转盘,水滴效果)

定义属性- (IBAction)trainsformAction:(id)sender;@property(nonatomic,retain)UIImageView *imageView; @prop...
  • c_ios
  • c_ios
  • 2016-01-13 09:04
  • 3055

VS2010点滴——C++的Lambda表达式

C++的Lambda表达式在WIN RT的异步编程中,占有非常重要的作用。但C++的Lambda表达式又不同于其他语言,比如C#,javascript。本篇旨在讨论C++ Lambda表达式的基本语法...
  • chw1989
  • chw1989
  • 2012-04-22 12:50
  • 3757

实习点滴 - 破窗理论、C++ 函数模板静态库

最近在搬砖,本以为仅仅是体力活而已,无奈自己功力不够,处处碰壁。这次的需求及其背景:业务中有一个recommendId的东西,类型是string或者vector。第一个字节(即recommendId[...
  • jiange_zh
  • jiange_zh
  • 2016-07-28 00:10
  • 1084

初习C++点滴摘录之编程的一些规则与建议(2)

第二篇——关于命名的些许规则与建议 命名规则因人而异。 规则: 【1】      标识符应当直观且可以拼读,可望文知义,不必进行“解码”。 【2】      标识符的长度应...
  • u010170012
  • u010170012
  • 2013-08-23 07:39
  • 481

C++ STL 应用点滴

1. 字符串大小写转换 string没有直接提供to_upper或to_lower这样的方法,不过有更通用的方法: std::string s("hello"); transform(s.begi...
  • ganxinjiang
  • ganxinjiang
  • 2013-01-13 10:15
  • 727

c++点滴知识总结

1、cout--console output 控制台输出      cin---console  input 控制台输入     endl--end line 结束一行    ...
  • woshizfs
  • woshizfs
  • 2014-05-28 21:31
  • 281

C++ 点滴积累(2)

1.C++中不为引用分配空间,C++如何输出数值的16/8进制,和如何输出字符串首地址。 #include using namespace std; void main(){ int a ...
  • whz_zb
  • whz_zb
  • 2011-10-22 14:33
  • 545

c++点滴

1.const变量和宏的区别? (1)宏是在预编译器直接在使用位置将代码直接展开插入的,不进行类型正确性检查,由于仅仅是单纯的展开替换,不会分配内存;而const常量具有具体的类型,编译阶段会严格执...
  • aoo_wangxu
  • aoo_wangxu
  • 2016-06-09 22:35
  • 128
    个人资料
    • 访问:75次
    • 积分:11
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档
    阅读排行
    评论排行