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' ...
随机推荐
- .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服务
.NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...
- 435. Non-overlapping Intervals
Given a collection of intervals, find the minimum number of intervals you need to remove to make the ...
- Morley's Theorem
题解: 计算几何基本操作 注意叉积的时候字母写的顺序 代码: #include <bits/stdc++.h> using namespace std; #define rint regi ...
- [转]Maven与nexus关系
开始在使用Maven时,总是会听到nexus这个词,一会儿maven,一会儿nexus,当时很是困惑,nexus是什么呢,为什么它总是和maven一起被提到呢? 我们一步一步来了解吧. 一.了解Mav ...
- python全栈开发day82-modelForm
1.jsonp内容 from django.shortcuts import render # Create your views here. def upload(request): if requ ...
- ssh登录报错-bash fork retry Resource temporarily unavailable
- JMeter执行压测输出HTML图形化报表(二)
命令行模式将jtl转成测试图表 注意此方法只使用jmeter3.0以后版本 第一种:在测试过程中将jtl转成测试报告(在jmeter的bin目录下执行) jmeter -n -t baidu_requ ...
- js+jquery手写弹出提示框
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- byte数据常量池问题
[代码] public class BufferPoolDemo { public static void main(String[] args) { Integer i1=127; Integer ...
- js去掉前后空格
//去前后空格 data=data.replace(/(^\s*)|(\s*$)/g, "");