本文提供了全面的C++11语法学习指南,涵盖了从基础语法到高级特性,包括变量声明、常量定义、数据类型、控制结构和面向对象编程等内容。此外,文章还介绍了C++11的新特性,如自动类型推导和智能指针,帮助读者更好地理解和使用C++语言。通过实践示例和代码讲解,读者可以深入掌握C++11语法。
C++11语法学习:从入门到实践的简单教程 C++11基础语法入门变量声明与初始化
在C++中,使用int
, float
, char
等关键字来声明基本数据类型。变量声明时需要指定类型,同时可以立即进行初始化。
int age = 25; // 定义整型变量 age 并初始化为 25
float price = 9.99; // 定义浮点型变量 price 并初始化为 9.99
char grade = 'A'; // 定义字符型变量 grade 并初始化为 'A'
常量定义
常量的定义使用关键字const
。一旦定义了常量,就不能改变其值。
const int MAX_VALUE = 100; // 定义一个整型常量 MAX_VALUE 为 100
const float PI = 3.14159; // 定义一个浮点常量 PI 为 3.14159
基本数据类型
C++ 提供了几种基本的数据类型,包括整型、浮点型、字符型等。每种类型都有其特定的取值范围。
- 整型
int
,long
,short
,long long
- 浮点型
float
,double
,long double
- 字符型
char
- 布尔类型
bool
(C++11引入)
示例如下:
int a = 10; // 整型
long b = 20000; // 长整型
short c = -100; // 短整型
long long d = 999999999999999999LL; // 长长整型
float e = 3.14f; // 浮点型
double f = 2.71828; // 双精度浮点型
long double g = 9.81L; // 长双精度浮点型
char h = 'x'; // 字符型
bool i = true; // 布尔型
注释
注释是代码中用于解释或标记的部分,编译器会忽略它们。C++支持单行注释和多行注释。
- 单行注释 使用
//
开头,直到该行结束 - 多行注释 使用
/* ... */
包围,可以跨越多行
示例如下:
// 这是单行注释
/*
这是多行注释
可以包含多行
*/
控制结构
条件语句(if, switch)
条件语句允许程序根据不同的条件执行不同的代码块。
if 语句
基本语法:
if (条件) {
// 条件为真时执行的代码
} else {
// 条件为假时执行的代码
}
示例如下:
int score = 85;
if (score >= 60) {
cout << "及格了!";
} else {
cout << "不及格!";
}
switch 语句
基本语法:
switch (表达式) {
case 常量1:
// 代码块1
break;
case 常量2:
// 代码块2
break;
default:
// 默认的代码块
}
示例如下:
char grade = 'B';
switch (grade) {
case 'A':
cout << "优秀";
break;
case 'B':
cout << "良好";
break;
case 'C':
cout << "及格";
break;
default:
cout << "不及格";
}
循环语句(for, while, do-while)
循环语句允许代码块重复执行,直到满足某个条件为止。
for 循环
基本语法:
for (初始化; 条件; 更新) {
// 循环体
}
示例如下:
for (int i = 0; i < 5; i++) {
cout << "循环次数: " << i << endl;
}
while 循环
基本语法:
while (条件) {
// 循环体
}
示例如下:
int i = 0;
while (i < 5) {
cout << "循环次数: " << i << endl;
i++;
}
do-while 循环
基本语法:
do {
// 循环体
} while (条件);
示例如下:
int i = 0;
do {
cout << "循环次数: " << i << endl;
i++;
} while (i < 5);
跳转语句(break, continue, goto)
跳转语句可以改变程序的执行流程,跳出循环或跳转到语句标签。
break 语句
break
用于跳出当前循环或 switch 语句。
示例如下:
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 跳出循环
}
cout << i << endl;
}
continue 语句
continue
用于跳过当前循环的剩余部分,直接进入下一次循环。
示例如下:
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 跳过偶数
}
cout << i << endl;
}
goto 语句
goto
用于跳转到指定标签处。
示例如下:
int i = 0;
label:
cout << "当前i值为: " << i << endl;
i++;
if (i < 5) {
goto label;
}
函数
函数定义与调用
函数是程序的基本组成部分,它可以封装一系列操作,供其他代码调用。
定义函数
函数声明的基本语法如下:
return_type 函数名(参数列表) {
// 函数体
return 返回值;
}
示例如下:
int add(int a, int b) {
return a + b;
}
调用函数
调用函数时,传递实参并接收返回值。
示例如下:
int result = add(3, 5);
cout << "结果为: " << result << endl;
函数参数与返回值
函数可以接受参数,也可以返回值。参数可以是基本数据类型,也可以是用户定义的数据类型。
示例如下:
int multiply(int a, int b) {
return a * b;
}
double average(int a, int b, int c) {
return (a + b + c) / 3.0;
}
函数重载
函数重载是指多个函数可以有相同的名称,但参数列表不同。这样可以根据不同的参数来区分不同的函数。
示例如下:
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
数组与指针
数组定义与使用
数组是一组相同类型的数据元素的集合,可以通过下标访问数组中的元素。
定义数组
基本语法:
type array_name[size];
示例如下:
int numbers[5] = {1, 2, 3, 4, 5};
char letters[5] = {'a', 'b', 'c', 'd', 'e'};
访问数组元素
通过下标访问数组元素:
示例如下:
int numbers[5] = {1, 2, 3, 4, 5};
cout << numbers[0] << endl; // 输出 1
指针基础
指针是存储变量地址的变量,可以通过指针访问和修改指针所指向的变量的值。
定义指针
基本语法:
type *pointer_name;
示例如下:
int a = 10;
int *ptr = &a;
访问指针指向的值
使用 *
访问指针指向的值:
示例如下:
int a = 10;
int *ptr = &a;
cout << *ptr << endl; // 输出 10
数组与指针的关系
数组名在表达式中被视为指向数组第一个元素的指针。可以通过指针访问数组元素。
示例如下:
int numbers[5] = {1, 2, 3, 4, 5};
int *ptr = numbers;
cout << *(ptr + 1) << endl; // 输出 2
面向对象编程基础
类与对象
类是面向对象编程的基本组成部分,它定义了一组相关的属性(成员变量)和方法(成员函数)。
定义类
基本语法:
class 类名 {
// 私有成员
private:
type member_variable;
// 公有成员
public:
type member_function();
};
示例如下:
class Student {
private:
string name;
int age;
public:
void set_name(string n) {
name = n;
}
string get_name() {
return name;
}
};
创建对象
使用类名来创建对象:
示例如下:
Student s;
s.set_name("张三");
cout << s.get_name() << endl; // 输出 "张三"
成员变量与成员函数
成员变量定义了类的数据成员,成员函数定义了类的方法。
示例如下:
class Rectangle {
private:
int length;
int width;
public:
int get_area() {
return length * width;
}
};
构造函数与析构函数
构造函数用于初始化对象,析构函数用于清理对象。
构造函数
基本语法:
类名(参数列表) {
// 构造函数体
}
示例如下:
class Point {
public:
int x;
int y;
Point(int a, int b) {
x = a;
y = b;
}
};
析构函数
基本语法:
~类名() {
// 析构函数体
}
示例如下:
class Counter {
private:
int count;
public:
Counter() {
count = 0;
}
~Counter() {
cout << "析构函数被调用" << endl;
}
void increment() {
count++;
}
int get_count() {
return count;
}
};
封装、继承与多态
封装
封装是指将数据和操作数据的方法组织在一起,使数据对外部不可直接访问。
示例如下:
class Account {
private:
double balance;
public:
void deposit(double amount) {
balance += amount;
}
double get_balance() {
return balance;
}
};
继承
继承是指一个类可以继承另一个类的属性和方法,从而实现代码的复用。
示例如下:
class Animal {
public:
void eat() {
cout << "吃东西" << endl;
}
};
class Dog : public Animal {
public:
void bark() {
cout << "汪汪汪" << endl;
}
};
多态
多态是指一个对象可以有多种表现形式,通过基类指针或引用指向派生类对象,可以在运行时动态地调用相应的成员函数。
示例如下:
class Shape {
public:
virtual void draw() = 0; // 纯虚函数,声明 Shape 类不可实例化
};
class Circle : public Shape {
public:
void draw() override {
cout << "绘制圆形" << endl;
}
};
class Square : public Shape {
public:
void draw() override {
cout << "绘制正方形" << endl;
}
};
void draw_shape(Shape &s) {
s.draw();
}
int main() {
Circle c;
Square s;
draw_shape(c); // 输出 "绘制圆形"
draw_shape(s); // 输出 "绘制正方形"
return 0;
}
C++11新特性简介
自动类型推导(auto 关键字)
auto
关键字用于声明变量时自动推导变量类型,提高了代码的简洁性和可读性。
示例如下:
auto value = 42; // value 的类型为 int
auto pi = 3.14; // pi 的类型为 double
auto ch = 'A'; // ch 的类型为 char
范围 for 循环
范围 for 循环可以方便地遍历容器或数组中的元素。
示例如下:
int numbers[] = {1, 2, 3, 4, 5};
for (auto &num : numbers) {
num *= 2;
}
for (const auto &num : numbers) {
cout << num << endl;
}
智能指针(unique_ptr)
智能指针是 C++11 引入的一种安全的指针类型,可以自动管理内存,避免内存泄漏。
示例如下:
#include <memory>
int main() {
auto ptr = std::make_unique<int>(42);
*ptr = 100; // 重置指针指向的内存值
cout << *ptr << endl;
// unique_ptr 会自动释放内存
return 0;
}
通过以上教程,读者可以全面了解C++11语法的基本概念、控制结构、函数、数组与指针、面向对象编程基础以及C++11新特性。希望这些知识能帮助读者更好地理解和使用C++语言。如果希望进一步深入学习C++,可以参考慕课网等在线学习平台的相关课程,它们提供了丰富的学习资源和实践项目,帮助读者巩固所学知识。
共同学习,写下你的评论
评论加载中...
作者其他优质文章