C++ 初步
c++新特性:
1. 初始化方法:
复制初始化 int x=1024;
直接初始化 int x (1024);
2.变量随用随定义
3.增加bool数据类型
输入输出:
cout<<x;
cin>>x>>y;
cout<<oct<<x<<endl; //oct为8进制,dec为十进制,hex为16进制
cout<<boolalpha<<y<<endl; //输出布尔型数据
命名空间:
namespace A
{
int x=0;
void f1();
void f2();
}
A::x A::f1()
引用:变量的别名
int a=3;
int &b=a; 引用必须初始化
b=10;
结构体类型的引用:
typedef struct
{
int x;
int y;
}Coor;
Coor c1;
Coor &c=c1;
c.x;
指针类型的引用:
类型 *&指针引用名=指针;
int a=10;
int *p=&a;
int *&q=p;
*q=20; //a=20;
引用做函数参数:
void fun(int &a,int &b)
{
int c=0;
c=a;
a=b;
b=c;
}
int x=10,y=20;
fun(x,y);
const:
函数参数默认值:函数括号内最右端的变量必须有默认值 ,无实参用默认值,否则覆盖。
函数重载:在相同作用域下,有同名函数,参数个数和类型不同。
内联函数: 编译时将函数体内代码和实参代替函数调用语句。效率高,有条件
关键字:inline
内存管理:
申请:new int *p=new int; 释放:delete p;
块内存: int *arr=new int[10]; delete []arr;
注意事项:c语言:*malloc(),free()。
if(NULL==p){ // 申请失败 } delete p; p=NULL;
类:
对象实例化:
1.从栈实例化对象:class TV{ .... } TV tv; TV tv[20];
2.从堆实例化: TV *p =new TV(); delete p;
对象成员的访问:
1. 栈: tv.type=0; tv.func();
2.堆: p->tyoe=0; p->func(); delete p; p=NULL;
数据类型:
1.string:
#include<string>
初始化:string s1; s1为空串
string s2("ABC");
string s3(s2); 将s3初始化为s2的一个副本
string s4(n,'c'); 将s4初始化为字符‘c’的n个副本
常用操作: s.empty(), s.size() , s[n], = , + , == , !=
数据封装:
- #include<stdlib.h>
- #include<iostream>
- #include<string>
- using namespace std;
- class Student
- {
- public:
- void setName(string _name)
- {
- m_strName=_name;
- }
- string getName()
- {
- return m_strName;
- }
- void setGender(string _gender)
- {
- m_strGender=_gender;
- }
- string getGender()
- {
- return m_strGender;
- }
- int getScore()
- {
- return m_iScore;
- }
- void initScore()
- {
- m_iScore=;
- }
- void study(int _score)
- {
- m_iScore+=_score;
- }
- private:
- string m_strName;
- string m_strGender;
- int m_iScore;
- };
- int main(void)
- {
- Student stu;
- stu.initScore();
- stu.setName("hhhh");
- stu.setGender("F");
- stu.study();
- stu.study();
- cout<<stu.getName()<<" "<<stu.getGender()<<" "<<stu.getScore()<<endl;
- return ;
- }
内联函数:inline
类内定义:类内定义的函数会优先转换为内联函数
类外定义:1.同文件类外定义
- #include<stdlib.h>
- #include<iostream>
- #include<string>
- using namespace std;
- class Teacher
- {
- public:
- void setName(string _name);
- string getName();
- void setGender(string _gender);
- string getGender();
- void setAge(int _age);
- int getAge();
- void teach();
- private:
- string m_strName;
- string m_strGender;
- int m_iAge;
- };
- void Teacher::setName(string _name){
- m_strName=_name;
- }
- string Teacher::getName()
- {
- return m_strName;
- }
- void Teacher::setGender(string _gender){
- m_strGender=_gender;
- }
- string Teacher::getGender(){
- return m_strGender;
- }
- void Teacher::setAge(int _age){
- m_iAge=_age;
- }
- int Teacher::getAge(){
- return m_iAge;
- }
- void Teacher::teach(){
- cout<<"teaching!...."<<endl;
- }
- int main(void)
- {
- Teacher t;
- t.setName("Kongzi");
- t.setGender("M");
- t.setAge();
- cout<<t.getName()<<" "<<t.getGender()<<" "<<t.getAge()<<endl;
- t.teach();
- return ;
- }
2.分文件类外定义
- //teacher.h
- /*
- * teacher.h
- *
- * Created on: 2017年7月12日
- * Author: rmbp
- */
- #include <string>
- using namespace std;
- class Teacher
- {
- public:
- void setName(string _name);
- string getName();
- void setGender(string _gender);
- string getGender();
- void setAge(int _age);
- int getAge();
- void teach();
- private:
- string m_strName;
- string m_strGender;
- int m_iAge;
- };
- //teacher.cpp
- /*
- * teacher.cpp
- *
- * Created on: 2017年7月12日
- * Author: rmbp
- */
- #include "teacher.h"
- #include<iostream>
- using namespace std;
- void Teacher::setName(string _name){
- m_strName=_name;
- }
- string Teacher::getName()
- {
- return m_strName;
- }
- void Teacher::setGender(string _gender){
- m_strGender=_gender;
- }
- string Teacher::getGender(){
- return m_strGender;
- }
- void Teacher::setAge(int _age){
- m_iAge=_age;
- }
- int Teacher::getAge(){
- return m_iAge;
- }
- void Teacher::teach(){
- cout<<"teaching!...."<<endl;
- }
- //hello.cpp
- #include<stdlib.h>
- #include<iostream>
- #include<string>
- #include "teacher.h"
- using namespace std;
- int main(void)
- {
- Teacher t;
- t.setName("Kongzi");
- t.setGender("M");
- t.setAge();
- cout<<t.getName()<<" "<<t.getGender()<<" "<<t.getAge()<<endl;
- t.teach();
- return ;
- }
内存分区:
栈区:系统控制
堆区:程序员控制
全局区:存储全局变量和静态变量
常量区:字符串,常量
代码区:存储逻辑代码的的二进制
构造函数:在对象实例化时被自动调用,与类名同名,没有返回值,可以重载,只用到一个构造函数,用户没有创建时系统自动创建。
- //teacher.h
- #include <string>
- using namespace std;
- class Teacher
- {
- public:
- Teacher();
- Teacher(string name,int age); //可以初始化参数值
- void setName(string _name);
- string getName();
- void setAge(int _age);
- int getAge();
- private:
- string m_strName;
- string m_strGender;
- int m_iAge;
- };
- //teacher.cpp
- #include "teacher.h"
- #include<iostream>
- using namespace std;
- Teacher::Teacher()
- {
- m_strNme="JIM";
- m_iAge=;
- cout<<"Teacher()"<<endl;
- }
- Teacher::Teacher(string name,int age){
- m_strNme=name;
- m_iAge=age;
- cout<<"Teacher(string name,int age)"<<endl;
- }
- void Teacher::setName(string _name){
- m_strName=_name;
- }
- string Teacher::getName()
- {
- return m_strName;
- }
- void Teacher::setAge(int _age){
- m_iAge=_age;
- }
- int Teacher::getAge(){
- return m_iAge;
- }
- //hello.cpp
- #include<stdlib.h>
- #include<iostream>
- #include<string>
- #include "teacher.h"
- using namespace std;
- int main(void)
- {
- Teacher t1;
- Teacher t2("Merry",);
- cout<<t1.getName()<<" "<<t1.getAge()<<endl;
- cout<<t2.getName()<<" "<<t2.getAge()<<endl;
- return ;
- }
默认构造函数:在对象实例化时不需要传递参数
构造函数初始化列表:先于构造函数执行,只能用于构造函数,可以同时初始化多个数据
- class Student
- {
- public:
- Student():m_strName("JIM"),m_iAge(){}
- private:
- string m_strName;
- int m_iAge;
- };
必要性:
- class Circle
- {
- public:
- Circle():m_dPi(3.14){} //不能用构造函数,const
- private:
- const double m_dPi;
- }
- //teacher.h
- #include <string>
- using namespace std;
- class Teacher
- {
- public:
- Teacher(string name="JIM",int age=,int m=);
- void setName(string _name);
- string getName();
- void setAge(int _age);
- int getAge();
- int getMax();
- private:
- string m_strName;
- int m_iAge;
- const int m_iMax;
- };
- //teacher.cpp
- #include "teacher.h"
- #include<iostream>
- using namespace std;
- Teacher::Teacher(string name,int age,int m):m_strName(name),m_iAge(age),m_iMax(m)
- {
- cout<<"Teacher(string name,int age)"<<endl;
- }
- void Teacher::setName(string _name){
- m_strName=_name;
- }
- string Teacher::getName()
- {
- return m_strName;
- }
- void Teacher::setAge(int _age){
- m_iAge=_age;
- }
- int Teacher::getAge(){
- return m_iAge;
- }
- int Teacher::getMax(){
- return m_iMax;
- }
- //hello.cpp
- #include<stdlib.h>
- #include<iostream>
- #include<string>
- #include "teacher.h"
- using namespace std;
- int main(void)
- {
- Teacher t1("merry",);
- cout<<t1.getName()<<" "<<t1.getAge()<<" "<<t1.getMax()<<endl;
- return ;
- }
拷贝构造函数: 类名(const 类名& 变量名)
1.当没有自定义拷贝构造函数则系统系统自动生成一个默认的拷贝构造函数。
2.当采用直接初始化或复制初始化实例化对象时系统自动调用拷贝构造函数。
无参构造函数,有参构造函数(参数带默认值)--》默认构造函数
系统自动生成普通构造函数和拷贝构造函数。不能重载。
- //teacher.h
- Teacher(const Teacher& tea);
- //....
- //teacher.cpp
- teacher::Teacher(const Teacher &tea){
- cout<<"Teacher(const Teacher &tea)"<<endl;
- }
- //hello.cpp
- int main(void)
- {
- Teacher t1;
- Teacher t2=t1;
- Teacher t3(t1);
- //....
- }
- //hello.cpp
- void test(Teacher t)
- {
- }
- int main(void)
- {
- Teacher t1; //构造函数
- test(t1); //拷贝构造函数
- //....
- }
析构函数:~类名(),不允许加任何参数,系统自动产生,在对象销毁时自动调用。没有返回值,没有参数不能重载
- //teacher.h
- /*
- * teacher.h
- *
- * Created on: 2017年7月12日
- * Author: rmbp
- */
- #include <string>
- using namespace std;
- class Teacher
- {
- public:
- Teacher(string name="JIM",int age=); //构造
- Teacher(const Teacher &tea); //拷贝构造
- ~Teacher(); //析构函数
- void setName(string _name);
- string getName();
- void setAge(int _age);
- int getAge();
- private:
- string m_strName;
- int m_iAge;
- };
- //teacher.cpp
- #include "teacher.h"
- #include<iostream>
- using namespace std;
- Teacher::Teacher(string name,int age):m_strName(name),m_iAge(age)
- {
- cout<<"Teacher(string name,int age)"<<endl;
- }
- Teacher::Teacher(const Teacher &tea)
- {
- cout<<"Teacher(const Teacher &tea)"<<endl;
- }
- Teacher:~Teacher()
- {
- cout<<"~Teacher()"<<endl;
- }
- void Teacher::setName(string _name){
- m_strName=_name;
- }
- string Teacher::getName()
- {
- return m_strName;
- }
- void Teacher::setAge(int _age){
- m_iAge=_age;
- }
- int Teacher::getAge(){
- return m_iAge;
- }
- //hello.cpp
- #include<stdlib.h>
- #include<iostream>
- #include<string>
- #include "teacher.h"
- using namespace std;
- int main(void)
- {
- Teacher t1;
- //Teacher *p=new Teacher();
- //delete p;
- Teacher t2(t1);
- return ;
- }
C++ 初步的更多相关文章
- 移动端之Android开发的几种方式的初步体验
目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...
- CSharpGL(29)初步封装Texture和Framebuffer
+BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...
- Android自定义View初步
经过上一篇的介绍,大家对于自定义View一定有了一定的认识,接下来我们就以实现一个图片下显示文字的自定义View来练习一下.废话不多说,下面进入我们的正题,首先看一下我们的思路,1.我们需要通过在va ...
- 初步认识Node 之Node为何物
很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了. Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...
- [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)
[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date 周六 10 一月 2015 By 钟谢伟 Category website develop ...
- 基于C/S架构的3D对战网络游戏C++框架_05搭建系统开发环境与Boost智能指针、内存池初步了解
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- Azure底层架构的初步分析
之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...
- CozyRSS开发记录14-RSS源管理初步完工
CozyRSS开发记录14-RSS源管理初步完工 1.添加源的响应 DialogHost.Show有几个版本的重载,加一个DialogClosingEventHandler参数.我们让添加源对话框的添 ...
- 初步了解CPU
了解CPU By JackKing_defier 首先说明一下,本文内容主要是简单说明CPU的大致原理,所需要的前提知识我会提出,但是由于篇幅我不会再详细讲解需要的其他基础知识.默认学过工科基础课. ...
- Windows多线程多任务设计初步(转)
Windows多线程多任务设计初步 [前言:]当前流行的Windows操作系统,它能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程 ...
随机推荐
- 第十五节、OpenCV学习(四)图像平滑与滤波
图像的平滑与滤波 平滑滤波是低频增强的空间域滤波技术,是图像模糊.消除噪声. 一.2D滤波器cv2.filter2D() 对于2D图像可以进行低通或者高通滤波操作,低通滤波(LPF)有利于去噪声,模糊 ...
- linux 查看ip地址
1.先要打开linux服务器,然后在linux桌面的空白处点击右键 2.在弹出的选项里,点击[打开终端] 3.打开linux服务器的命令终端后,输入查询linux的ip地址的命令:ifconfig - ...
- 使用freemarker生成word文档处理表格数据
1.把需要从数据库取值的字段用${}括起来,如:${busDate};2.表格数据的循环需要加标签:<#list tbl3 as tbl3>......</#list>< ...
- 生成透视列之for xml path
临时表#t原始数据: 实现如下格式,即根据Province分组,把每个组对应的City列以某种格式展示: 实现方法: select t.Province,(select city+',' From # ...
- webpack打包文件
npm init -y//生成package.json npm install webpack webpack-cli --save-dev//安装webpack和webpack-cli根据入口文件. ...
- IE兼容事件绑定V1.0
想要兼容IE678,少用原型,因为它们没有完全实现ECMA-262规范 (function(window){ //兼容IE678时少用原型,因为它没有完全遵循ECMA-262规范 //衬垫代码:isA ...
- Android应用市场的帮助类
写了一个Android应用市场的帮助类,如下: public class MarketUtils { public static final String MARKET_DATA = "ma ...
- CentOS Android Studio桌面图标的创建
1.切换到root用户,在桌面上创建Android.Studio.desktop,如下: [Desktop Entry] Name=Android Studio Comment=Android Stu ...
- 配置SSL证书
在阿里云买了SSL证书,但是访问的时候提示如下图: 这个就郁闷了,按照这个方式导入了证书,但还是不行,后来得到同事的帮助,使用这个工具 然后重启下服务器就可以了.
- String,下表和切片,分割
字符串介绍 1.字符串在内存中的存储 2.字符串的加法 3.字符串的格式化 1. 下标索引 所谓“下标”,就是编号,就好比超市中的存储柜的编号,通过这个编号就能找到相应的存储空间 字符串中" ...