C++程序设计方法2:基本语法
初始化列表
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:基本语法的更多相关文章
- 《程序设计方法》【PDF】下载
内容简介 <程序设计方法>主要以方法为主导,结合C语言,把程序设计方法学研究中若干成熟的理论和方法用通俗易懂的语言描述出来.<程序设计方法>还选取趣味性强.技巧性高.能够启发学 ...
- mooc- 基本程序设计方法week1,week2
学习了第一单元我们几本可以写出10行左右的代码. week1:python编程之基本方法 1.从计算机到程序设计语言: 理解计算机:计算机是能够根据一组指令操作数据的机器. 功能性:可以进行数据计算 ...
- Entity Framework 基于方法的查询语法
实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发 ...
- EF基于方法的查询语法
实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发人员 ...
- C++程序设计方法2:基本语法2
对象赋值-赋值运算符重载 赋值运算符函数是在类中定义的特殊的成员函数 典型的实现方式: ClassName& operator=(const ClassName &right) { i ...
- ruby创建某些“关键字”方法别名的语法
begin和end是ruby的关键字,但是Range中也有名称为begin和end的实例方法.现在问题来了:怎么创建它们的别名方法? 如果用class Range;alias begin_x begi ...
- ThinkPHP 数据库操作(三) : 查询方法、查询语法、链式操作
查询方法 条件查询方法 where 方法 可以使用 where 方法进行 AND 条件查询: Db::table('think_user') ->where('name','like','%th ...
- iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法
本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS ...
- Jquery 模板插件 jquery.tmpl.js 的使用方法(1):基本语法,绑定,each循环,ajax获取json数据
jquery.tmpl.js 是一个模板js ,主要有2个方法 (1):$.template()方法,将一段script或者是Html编译为模板,例如 $.template('myTemplate' ...
随机推荐
- react react-transition-group实现动画
import React,{ Component,Fragment } from 'react';import './style.css';import { CSSTransition,Transit ...
- CCF-CSP 第三题字符串整理(模拟大法好)
URL映射 规则的相邻两项之间用‘/’分开,所以我们先把所有项分开,然后依次把两个字符串的对应项匹配即可. 分离字符串这里用字符串流(stringstream)处理,先把所有的‘/’变为空格,然后一个 ...
- Java基础知识➣集合整理(三)
概述 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个层次. 实现(类) ...
- One point compactification
Theorem (One point compactification) Any locally compact space \(X\) can be embedded in another comp ...
- RequireJS跨域加载html模版后被转成JS问题分析及解决
问题描述 RequireJS跨域加载HTML模版失败,例如: 在a.com域名下请求CDN域名下的模版,text.js插件会把html文件转成html.js文件去加载,由于并没有生成html.js文件 ...
- 使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization)
使用 PySide2 开发 Maya 插件系列三:qt语言国际化(internationalization) 前言: 这是 qt for python 的语言国际化,基于 UI 的,python 也有 ...
- Sumdiv POJ - 1845 (逆元/分治)
Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S m ...
- HDU 2841-Visible Trees 【容斥】
<题目链接> 题目大意: 有一个农民,站在(0,0)点,从(1,1)点到(m,n)点每个点上有棵树,问这个农民能看到多少棵树.(如果多棵树在同一条直线上,那么他只能看到一颗) 解题分析: ...
- POJ 3126 Prime Path【BFS】
<题目链接> 题目大意: 给你两个四位数,它们均为素数,以第一个四位数作为起点,每次能够变换该四位数的任意一位,变换后的四位数也必须是素数,问你是否能够通过变换使得第一个四位数变成第二个四 ...
- 3-6 Vue中的条件渲染
本次案例讲解:v-if,v-show,v-else,v-else-if和key值的相关用法!!! v-if指令: //通过一个(v-if)指令 ,可以结合js表达式的返回值,决定一个标签是否在页面上展 ...