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[100];//匿名的struct数组

int main()
{
    decltype(anon_s)as;
    cin >> as[0].id.name;
}

基于范围的for循环语句

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

#include <iostream>
using namespace std;

int main()
{
    int arr[3] = { 1,3,9 };
    for (int e:arr)//for(auto e:arr)
    {
        cout << e << endl;
    }
    return 0;
}

追踪返回类型的函数

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

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{ 2016 };
    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 0;
}
时间: 2024-10-13 04:50:33

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

从程序设计方法到思维训练总结

本文通过几个例子来讲述程序设计方法,通过程序设计方法达到思维训练的目的. 主要的核心设计方法是伪代码法和分解法: 伪代码法:用来描述程序的思路,也可以用来注释 分解法:逐步细化,分解步骤 下面我们通过几个例子来学习伪代码法和分解法.(SD: 以下代码用python语言来编写) 示例索引: 法老的金字塔 丢手绢 示例一.法老的金字塔 题目: 编写一个程序,输入层数,在控制台打印出任意层数的金字塔,如图: 分析: 根据题目,金字塔图形由空格和星号组成,现在先设定金字塔为3层,height = 3 解

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

内容简介 <程序设计方法>主要以方法为主导,结合C语言,把程序设计方法学研究中若干成熟的理论和方法用通俗易懂的语言描述出来.<程序设计方法>还选取趣味性强.技巧性高.能够启发学生创造性思维的例题,以适应指导中学生参加各类程序设计比赛的需要. <程序设计方法>主要面向进修高等师范本科(专科起点)的中学教师,也可作为普通高等师范院校计算机专业和非计算机专业学生的教材或教学参考书. 目录 第1章程序设计方法概论 1.1 程序设计语言和程序设计方法 1.1.1 程序.语言和程序

关于get、set方法以及点语法的使用

首先写一个简单的get,set方法来熟悉它的作用 //Fraction.h @interface Fraction:NSObject -(void)setNumber:(int) n; -(int)getNumber; //Fraction.m #import Fraction.h @implementation Fraction { int number; } -(void)setNumber:(int)n;{ number = n; } -(int)getNumber{ return num

程序设计方法概述:从面相对象到面向功能到面向对象

1. 面向功能的程序设计方法.结构化程序设计方法.面向数据流的处理方式与结构化分析(Structrued Analysis,即SA).结构化编程(Structrued Program,即SP).结构化设计    (Structrued Design,即SD) 结构化程序设计方法主张按功能来分析系统需求,其主要原则可概括为自顶向下,逐步求精,模块化等.结构化程序设计首先采用结构化分析(Structrued Analysis,即SA)方法对系统进行需求分析,然后使用结构化设计(Structrued

客户-服务器程序设计方法

客户-服务器程序设计方法 <unix网络编程>第一卷中将客户服务器程序设计方法讲得透彻,这篇文章将其中编码的细节略去,通过伪代码的形式展现,主要介绍各种方法的思想: 示例是一个经典的TCP回射程序: 客户端发起连接请求,连接后发送一串数据:收到服务端的数据后输出到终端: 服务端收到客户端的数据后原样回写给客户端: 客户端伪代码: sockfd = socket(AF_INET,SOCK_STREAM,0); //与服务端建立连接 connect(sockfd); //连接建立后从终端读入数据并

EF基于方法的查询语法

实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发人员使用 Visual Basic 或 Visual C# 根据实体框架概念模型编写查询.针对实体框架的查询由针对对象上下文执行的命令目录树查询表示.LINQ to Entities 将语言集成查询 (LINQ) 查询转换为命令目录树查询,针对实体框架执行这些查询,并返回可同时由实体框架和 LINQ 使

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

对象赋值-赋值运算符重载 赋值运算符函数是在类中定义的特殊的成员函数 典型的实现方式: ClassName& operator=(const ClassName &right) { if (this != &right) { //将right的内容复制给当前的对象 } return *this; } #include <iostream> using namespace std; class Test { int id; public: Test(int i) :id(

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

本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列.然后在開始Objective C语言的学习,假设您遇到问题也能够与我探讨,另外将无偿分享自己整理的大概400G iOS学习视频及学习资料.都是干货哦.能够新浪微博私信?关注极客James.期待与您的共同学习和探讨.! 由于时间有限,每天在工作之余整理的学习分享.难免有不足之

Objective-C Block方法与笑笑语法

#pragma mark - block语法 NSLog(@"========block方法1==========="); [students sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { Student *stu1 = (Student *)obj1;//这里的obj1就是Student类型的 Student *stu2 = (Student *)obj2; NSLog(@"%ld",[st