初始化列表

int a[] = {1,2,3};

int a[]{1,2,3}

以上两个式子等价

int a = 3+5;

int a = {3+5};

int a(3+5);

int a{3+5};

以上式子等价

int *i = new int(10);

double *d = new double{1.2f};

变量的类型推导与基于范围的循环

使用decltype可以对变量或者表达式结果的类型进行推导,如:

#include <iostream>

using namespace std;

struct
{
char *name;
}anon_u; struct
{
int d;
decltype(anon_u)id;
}anon_s[];//匿名的struct数组 int main()
{
decltype(anon_s)as;
cin >> as[].id.name;
}

基于范围的for循环语句

基于范围的for循环:在循环头的圆括号中,由冒号:分为两部分,第一部分用于迭代的变量,第二个部分用于表示将被迭代的范围如:

#include <iostream>
using namespace std; int main()
{
int arr[] = { ,, };
for (int e:arr)//for(auto e:arr)
{
cout << e << endl;
}
return ;
}

追踪返回类型的函数

可以将函数的返回类型的声明信息放到函数参数列表的后边进行声明,如:
普通函数的声明形式:

int func(char*ptr, int val);

zz追踪返回类型的函数的声明形式:
auto func(char *ptr, int val)->int;

追踪返回类型在原本函数返回值的位置使用auto关键字

成员函数的定义:类内部定义和类的外部定义

友元

有时候需要允许某些函数访问对象的私有成员,可以通过声明该函数为类的“友元”来实现

#include <iostream>
using namespace std; class Test
{
int id;
public:
friend void print(Test obj);
}; void print(Test obj)
{
cout << obj.id << endl;
}
//Test类中声明了Test类的友元函数print,该函数在实现时可以访问Test类定义的对象的私有成员;

在定义元素为对象的数组(ClassName array_var[NUM];)时,类必须提供默认构造函数的定义;

在构造函数的初始化列表中,还可以调用其他构造函数,被称为“委派构造函数”

class Info
{
public:
Info() { Init(); }
Info(int i) :Info() { id = i; }
Info(char c) :Info() { gender = c; }
private:
void Init(){}
int id{ };
char gender{ 'M' };
};

拷贝构造函数

函数调用时以类的对象为形参或者返回类的对象时,编译器会生成自动调用“拷贝构造函数”,在已有对象基础上生成新的对象;

拷贝构造函数是一种特殊的构造函数,他的参数是语言规定的,是同类对象的常量引用;

语义上:用参数对象的内容初始化当前对象

class Person

{

int id;

public:
person(const Person &src) {id = src.id;}

}

拷贝构造函数的例子:

#include <iostream>
using namespace std; class Test
{
public:
Test() { cout << "Test()" << endl; }
Test(const Test& src) { cout << "Test(const Test&)" << endl; }
~Test() { cout << "~Test()" << endl; }
}; void func1(Test obj)
{
cout << "func1()" << endl;
} Test func2()
{
cout << "func2()" << endl;
return Test();
} int main()
{
cout << "main()" << endl;
Test t;
func1(t);
t = func2();
return ;
}

C++程序设计方法2:基本语法的更多相关文章

  1. 《程序设计方法》【PDF】下载

    内容简介 <程序设计方法>主要以方法为主导,结合C语言,把程序设计方法学研究中若干成熟的理论和方法用通俗易懂的语言描述出来.<程序设计方法>还选取趣味性强.技巧性高.能够启发学 ...

  2. mooc- 基本程序设计方法week1,week2

    学习了第一单元我们几本可以写出10行左右的代码. week1:python编程之基本方法 1.从计算机到程序设计语言: 理解计算机:计算机是能够根据一组指令操作数据的机器. 功能性:可以进行数据计算 ...

  3. Entity Framework 基于方法的查询语法

      实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发 ...

  4. EF基于方法的查询语法

    实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发人员 ...

  5. C++程序设计方法2:基本语法2

    对象赋值-赋值运算符重载 赋值运算符函数是在类中定义的特殊的成员函数 典型的实现方式: ClassName& operator=(const ClassName &right) { i ...

  6. ruby创建某些“关键字”方法别名的语法

    begin和end是ruby的关键字,但是Range中也有名称为begin和end的实例方法.现在问题来了:怎么创建它们的别名方法? 如果用class Range;alias begin_x begi ...

  7. ThinkPHP 数据库操作(三) : 查询方法、查询语法、链式操作

    查询方法 条件查询方法 where 方法 可以使用 where 方法进行 AND 条件查询: Db::table('think_user') ->where('name','like','%th ...

  8. iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法

    本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS ...

  9. Jquery 模板插件 jquery.tmpl.js 的使用方法(1):基本语法,绑定,each循环,ajax获取json数据

    jquery.tmpl.js 是一个模板js  ,主要有2个方法 (1):$.template()方法,将一段script或者是Html编译为模板,例如 $.template('myTemplate' ...

随机推荐

  1. sqoop的基本语法详解及可能遇到的错误

    1 sqoop介绍 Apache Sqoop是专为Apache Hadoop和结构化数据存储如关系数据库之间的数据转换工具的有效工具.你可以使用Sqoop从外部结构化数据存储的数据导入到Hadoop分 ...

  2. 【C++ Primer | 10】再探迭代器

    插入迭代器 1. 测试代码: #include<iostream> #include<vector> #include<list> #include<iter ...

  3. 视频H265格式压缩,软件压缩方法,硬件的没有条件,没法测试。

    libx265软压c:/ffmpeg/ffmpeg.exe -i input.mp4 -c:v libx265 -preset:v fast output.mp4 原文件大小:610.87mb 目标文 ...

  4. iptables命令

    iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分.可以直接配置,也可以通过许多前端和图形界面配置. 语法 iptables(选项)(参数) 选项 -t<表&g ...

  5. Can't connect to X11 window server using 的问题,求解

    在JVM中加入-Djava.awt.headless=true对于tomcat ,可以修改catalina.sh,加入:CATALINA_OPTS="$CATALINA_OPTS -Djav ...

  6. CallContext

    1.线程本地存储区的专用集合对象,并提供对每个逻辑执行线程都唯一的数据槽.2.数据槽不在其他逻辑线程上的调用上下文之间共享. class Program { static Jason_TestEnti ...

  7. javascript OOP实例—探测器

    <script> /*所有探测器都有探测的方法和分析的方法,分析当前的浏览器环境,不管是浏览器还是nodejs*/ /*container容器探测器*/ /*link链接探测器*/ /*外 ...

  8. L1与L2正则(转)

    概念: L0范数表示向量中非零元素的个数:NP问题,但可以用L1近似代替. L1范数表示向量中每个元素绝对值的和: L1范数的解通常是稀疏性的,倾向于选择:1. 数目较少的一些非常大的值  2. 数目 ...

  9. ionic 3 build后图片无法显示

    运行命令 ionic cordova build android 生成了android-debug.apk. /home/han/project/zero_app/platforms/android/ ...

  10. java运算符-逻辑、三元运算符

    1.逻辑运算符 逻辑运算符,它是用于布尔值进行运算的,运算的最终结果为布尔值true或false. 运算符 运算规则 范例 结果 & 与 false&true False | 或 fa ...