【C++基础】C++学习手记(持续更新)

搞过几年纯C,对于面向过程的编程思想有了一定掌握。对于常年征战面向对象的人来说,从java转python学习成本并不高,面向对象的思想具有通用性。而对于从纯C工程师而言,转型往往具备一定难度。以最近的工作为契机,接触到了C++方面的知识,随手记录下。

一、C++中 :: 符的使用

C语言中不同功能的C文件之间,其函数体往往需要加入前缀来区分,例如读取IIC操作,IIC_Read();读取串口,UART_Read()。在C++中为了避免不同的类成员命名重复,使用符号 ::来表示作用域和从属划分。::符前面一般是类名,后面是类的对象名。也有命名空间::类名::对象名的表述。

二、类实例化时带括号与不带括号的区别

(5条消息) c++实例化类加括号和不加括号的区别_a25179824的博客-优快云博客

建议养成带括号的习惯。

三、类中成员如果没标识,默认是公有/保护/私有?

默认是私有的。构造函数一般都是puiblic,方便随时随地创建对象。

四、C++中的static

static修饰的静态属性分配在数据段,在程序执行之初就已创建,而非在类实例化时创建。private修饰的static属性变量无法在类外赋值。

五、私有变量如何访问

示例代码如下,声明cat类,类中定义了两个方法分别获取和设置猫毛发的颜色。

#include <iostream>

using namespace std;

class Cat
{
public:
    string GetCatHairColor(void);       // 声明
    void SetCatHairColor(string color);

private:
    string HairColor;
};

string Cat::GetCatHairColor(void)
{
    return HairColor;                   // 可以外部定义,使用私有成员
}

void Cat::SetCatHairColor(string color)
{
    HairColor = color;
}

int main()
{
    // 小的测试程序不必使用new实例化,大的程序需要使用new,否则栈会撑爆
    Cat cat;                        // 在栈区进行类的实例化
    string s1;
    cat.SetCatHairColor("write");
    s1 = cat.GetCatHairColor();
    cout << s1 << endl;
    //cout << s1.HairColor << endl; // 私有成员不可直接访问
    return 0;
}

write 

六、类的函数方法应在哪里实现

一般比较简单的函数可以在函数体内实现,但建议统一放到体外实现,这样更整齐划一,一般函数体内实现的都是比较简单的,对私有成员的初始化很多都放到类内实现。

#include <iostream>

using namespace std;

class Cat
{
public:
    Cat(string catname):CatName(catname) {};    // 初始化私有成员CatName,推荐这种初始化方式,不必写繁杂的函数体,十分简洁。
    friend string getCatname(Cat pstu);
private:
    string CatName;
};

// 友元函数在类外可以不加域直接访问,但要声明私有成员是在哪个类中,所以需要形参传参
string getCatname(Cat pstu)
{
    return pstu.CatName;
}

int main()
{
    Cat Wangzai("wangzai");                 // 类定义并初始化

    cout << getCatname(Wangzai) << endl;
    return 0;
}

wangzai

七、引用符&

C++中的引用即别名,本身不占用地址空间。是C++中一种简化指针的用法。

int a;

int&ra=a; //定义引用ra,它是变量a的引用,即别名 

说明:  

(1)&在此不是求地址运算,而是起标识作用。  

(2)声明引用时,必须同时对其进行初始化。  

(3)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。  

ra=1; 等价于 a=1;  

(4)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。

(5)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱笑的七小沐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值