目录
快速入门
Hello C++
C++标准程序库中的所有标识符都被定义于一个名为std的namespace中,因此要使用
using namespace std;
输出使用cout
#include <iostream>
using namespace std;
int main()
{
cout << "hello C++" << endl;
return 0;
}
输入用cin
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
cout << a << endl;
return 0;
}
此外,使用 cerr 流来显示错误消息,而其他的日志消息则使用 clog 流来输出。
数据类型
布尔型 | bool |
字符型 | char |
整型 | int |
浮点型 | float |
双浮点型 | double |
无类型 | void |
宽字符型 | wchar_t |
需要注意的是,无论是C++的还是C语言后来引入的bool类型,他们虽然是bool类型,但其实不是真正的bool类型,因为他们都占用一个字节,而不是一个二进制位。所以不要想着将一个逻辑变量定义为bool类型来达到节省内存的目的。
字符串
1.和C一样的字符串
2.String类
#include <iostream>
using namespace std;
int main()
{
string str1 = "hello";
cout << str1.length() << endl;
cout << str1.data() << endl;
return 0;
}
引用
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。变量名称是变量附属在内存位置中的标签,可以把引用当成是变量附属在内存位置中的第二个标签。因此,可以通过原始变量名称或引用来访问变量的内容。
创建一个引用变量(&)r,并引用为i,然后打印出i和r的地址,可以发现是相同的,因为i和r其实在内存中是一个变量,只是名字不一样而已。需要注意的是,引用变量必须在创建的时候被初始化。
#include <iostream>
using namespace std;
int main()
{
int i = 7;
int& r = i;
cout << "address:" << &r << endl;
cout << "address:" << &i << endl;
return 0;
}
引用很容易与指针混淆,它们之间有三个主要的不同:
- 不存在空引用。引用必须连接到一块合法的内存。
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化。指针可以在任何时间被初始化。
C++面向对象
类、属性、方法、对象
创建一个类:关键字class和创建结构体差不多。
类中定义的变量称为类的属性;类成员函数是类的一个成员,也称类的方法;类实例的一个个体就是对象;方法可以操作类的任意对象,可以访问对象中的所有成员。类的方法可以在定义中直接定义(例如下边的say方法),也可以在类的外部使用范围解析运算符 :: 定义该函数(例如下边的getage方法)。
class person
{
private:
string name;
int age;
int high;
int weight;
public:
void say(string str)
{
cout << str.data() << endl;
}
int getage();
};
int person::getage()
{
return age;
}
类的访问限制
类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。如果没有使用任何访问修饰符,类的成员将被假定为私有成员
public成员在程序中类的外部是可访问的,可以不使用任何成员函数来设置和获取公有变量的值。
private成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。
protected成员变量或函数与私有成员十分相似,但有一点不同,保护成员在派生类(即子类)中是可访问的。
实际中,我们一般会在私有区域或者保护区域定义变量,那怎么修改这些变量的值呢?我们在公有区域定义相关的函数,以便在类的外部也可以调用这些函数。
也就是说一般来说属性是私有或保护的,对这些属性的操作是通过方法来进行的。这样一来就通过接口函数来规范了外部对属性的操作。
#include <iostream>
#include <ctime>
using namespace std;
class person
{
private:
string name;
int age;
public:
bool setname(string str);
bool setage(int a);
void say(string str)
{
cout << str.data() << endl;
}
int getage();
};
int main()
{
person forest;
forest.setname("forest");
forest.setage(23);
forest.say("good morning");
cout << forest.getage() <<endl;
return 0;
}
bool person::setage(int a)
{
if (typeid(a) != typeid(int))return false;