Cpp学习杂记

1.Typedef与Struct的使用

#include <iostream>
using namespace std;

typedef struct Time *Shijian;
struct Time{
    int Year;
    int Month;
    int Date;
};
int main() {
    struct Time t1{};
    Shijian t2{};

    cout <<"input year:"<<endl;
    cin>>t1.Year;

    cout<<"input month:"<<endl;
    cin>>t1.Month;

    cout<<"input Date:"<<endl;
    cin>>t1.Date;

    cout<<"The time is: "<<t1.Year<<" - "<<t1.Month<<" - "<<t1.Date<<endl;

    return 0;
}

typedef struct Time *Shijian 这句话,断句如下:
typedef / struct Time * / Shijian
把struct Time * 可用Shijian整体替换。

main中的第一行struct Time t1{ },中t1是struct Time类型;第二行的Shijian t2{ }中t2是struct Time型的指针。

explicit的用法

//explicit 一般用来修饰类的构造函数,如果在某些情况下,我们要求类的使用者必须显式调用类的构造函数时就需要使用explicit,反之默认类型转换可能会造成无法预期的问题.

//例如:String类
class String {
public:
explicit String(int n); //预先分配一个n个字节的字符串
String(const char* s); //从字符串s初始化一个String类
};
String::String(int n)
{
}
String::String(const char* s)
{
}
int main(int argc, char* argv[])
{
String s1 = 'a'; //由于使用了explicit,编译会提示错误,如果不用explicit,则会默认转换为String s=95分配了95字节,'a'的ascii码是95,而不是想要得"a".
String s2 = String(10); //没问题str 分配了10字节,内容未定
String s3 = "abcde"; //没问题str是"abcde"
return 0;
}

C++中成员函数与成员变量的分开存储

C++中只有 非静态成员变量 才属于类的对象,例如:
#include <iostream>
using namespace std;

class Clock{
public:
    Clock(int hour, int minute, int second){
        this->hour=hour;
        this->minute=minute;
        this->second=second;
    }

    void ShowTime(){
        cout<<"the time is: "<<hour<<":"<<minute<<":"<<second<<endl;
    }

private:
    int hour, minute, second;
};

int main() {
    Clock T(18,42,33);
    T.ShowTime();
    //Clock T;
    cout<< sizeof(T)<<" Byte"<<endl;

    return 0;
}
这里面的结果是T的sizeof为12Byte,因为Clock对象中有3个int型非静态成员变量。每个int型变量占4Byte。

全局变量和静态变量的区别

全局变量定义一次,在多个源文件中都可使用,其他源文件中使用时需要用“extern”关键字声明一下,告诉编译器在某个源文件中有一个全局变量。
静态变量在内存存储方式上与全局变量没有区别,静态全局变量只对本源文件有效,对其他源文件无效。具体用法区别如下。
#include<...........>
int global=1; //声明外部链接的变量
static int global2 //声明内部链接的变量
int func()
{
int global=5; //声明的内部变量和全局变量重名,调用时将会隐藏全局的global;
cout<<global; //是内部定义的global的值而不是外面的值.
//如何引用外面的变量呢???
cout<<::global; //可用作用域解析符(::)来说明你要输出的外面的全局变量.
static int global3; //声明无链接的变量
}
int main()
{
extern int alobal; //在本文件中此句可选.此句的意思为你需要引用外部的变量global;
global=8; //直接引用全局变量.
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值